1

私の iPhone アプリには、2 つの UIViewController があります。どちらも UITabBarController に埋め込まれています。ただし、TabBarController がタップされて VC が切り替わると、画面上の VC がデータを NSUserDefaults にアップロードし、切り替え先の VC が NSUserDefaults からそのデータを取得します。

私が現在行っているのは、最初の VC の viewWillDisappear にデータをアップロードしてから、2 番目の VC の viewWillAppear にデータをフェッチすることです。問題は、画面に表示されようとしている VC の viewWillAppear が「古い」VC の viewWillDisappear の前に呼び出されるため、まだアップロードされていないデータを取得しようとすることです。

「古いVC」が画面外に出ようとしているときに最初に認識して、新しいVCがそのデータを取得する前にデータをアップロードできるようにするには、何を使用できますか?

*古いVCが受信するようにUITabBArControllerDelegateも設定しようとしました-tabBarController:didSelectViewController:しかし、それもあまりにも遅く呼び出されます。

4

3 に答える 3

4

多くの情報を送信しない場合は、利用可能な多くのオプションの 1 つとしてデフォルト変数を使用できます。最善ではないかもしれませんが、うまくいきます。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:Variable forKey:@"variable"];
    [defaults synchronize];

変数を設定するには

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *fetchVariable = [defaults objectForKey:@"variable"];

他の VC でそれを取得します。

于 2012-12-30T08:45:32.873 に答える
0

「古いVC」が画面外に出ようとしているときに最初に認識して、新しいVCがそのデータを取得する前にデータをアップロードできるようにするには、何を使用できますか?

– tabBarController:didSelectViewController:UITabBarControllerDelegate メソッドを使用して、データを に保存してみてくださいNSUserDefaultsviewWillAppearこれは、任意のコントローラーで確実に呼び出す必要があります。

現在のアプローチを維持したい場合は、2 番目のビュー コントローラーのviewDidAppear:代わりに使用してみてください。viewWillAppear:これは、大量のデータを取得していないNSUserDefaults場合 (そうであると思われます)、および 2 番目のビュー コントローラー UI でデータの表示に遅延が発生しない場合は、適切に機能するはずです。

あなたが持っている別のアプローチは、最初のコントローラーNSUserDefaultsが変更されるたびにデータを更新するようにすることです。

于 2012-12-30T08:46:43.963 に答える
0

書き込みと読み取りは、不要なオーバーヘッドのように聞こえます。もちろん、とにかく書く必要がない限り。

UIViewControllerのオブジェクトにラップされたすべてのデータを にUITabBarController渡し、それを新しい に渡しUIViewControllerます。これがすべて (または大部分) のタブのパターンである場合は、新しいプロトコルを作成し、UIViewControllerそれを実装させます。コントローラーUITabBarControllerがプロトコルに準拠しているかどうかを確認するだけで、どのコントローラーがそれを必要としているかを判断できます。

于 2012-12-30T08:58:42.150 に答える