頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


NSMutableStringでタブ間データのやりとり

とぼけたことをしていたのでネタってことでエントリー。

例えばtabBarアプリでのお話とします。

HogeAppDelegate.mでUITabBarControllerのオブジェクトを作って各タブの中身となるviewControllerを突っ込んでいく、という形。

突っ込むviewControllerのオブジェクトをここでは
tab1ViewController
tab2ViewController
とでもしましょう。

やりたかったのが、各タブ間(tab1とtab2)でのデータの受け渡し。
そんなに大量のデータのやりとりではなく、単にBOOL値1つ程度。

Core Dataの"一時"ってのにチェックして使ってもできたけど、もう一つなんと言うか面倒。

ややダサイけど共通の文字列型のデータを持たせて済ませてしまおうと思いましたが、、、

まず、おおもとであるHogeAppDelegate.hで
NSString *isFinish;
と宣言しておく。

HogeAppDelegate.mでは
isFinish = @"NO";
ってな具合に初期値設定(他にも方法あるけど、どれも以下の結果は変わらず)。
あとタブの中身となるviewControllerにこの参照を教えてあげる。
tab1ViewController.isFinish = isFinish;
tab2ViewController.isFinish = isFinish;
こんな感じね。

もちろん、tab1ViewControllerもtab2ViewControllerもisFinishってプロパティを設定しておく。

で、(仮に)tab1内でこのself.isFinishを書き換えることにします。
理想的には、tab2のviewWillAppear:なんかでself.isFinishがYESなら必要な処理をする、とかそういうことをしたいわけです。

ところが、tab1内でself.isFinishを"YES"と書き換える方法であれ?となりまして、、、
self.isFinish = @"YES";
self.isFinish = [[NSString alloc] initWithString:@"YES"];
self.isFinish = [NSString stringWithString:@"YES"];

↑どうやっても、うまくいかない。
つまり、self.isFinishは書き換えられても、HogeAppDelegate.m内のisFinishも、tab2内のself.isFinishも変わっていないのです。
tab1内でポインタを確認すると、新しくなっており、別の変数になっちゃっている感じ。

んー、どうしたものかと調べてて気が付いたのが、NSMutableStringクラスなんてのがあったじゃないかっ!
うっかりしてたよ~!

ええ、NSStringをNSMutableStringに変えて、書き換えを
[self.isFinish setString:@"YES"];
とすれば、意図通り動いてくれました。
もちろん、ポインタも変わらず。

ふー、この調子じゃアプリの完成はいつになるやら、、、?

<< NSMutableDictionaryのinitWithCapacity:はいくらにするの?  TopPage  autoreleaseによるメモリ解放について誤解してた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/446-c873d758




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad