0

applicationDidEnterBackgroundが呼び出されるたびに (コア データを使用して) 保存する必要があるルート ビュー コントローラーに配列があります。デリゲート内のルート ビュー コントローラーのインスタンスにメッセージを送信するにはどうすればよいですか?

デリゲートをルートに設定したときにView Controllerへの参照を与えることを考えていましたが、それは非効率的です。これを行うより良い方法はありますか?

4

3 に答える 3

3

ルート ビュー コントローラーで、ApplicationWillEnterBackground 通知を受け取るように登録します。ルートView Controllerは、この通知を受け取ると保存を実行できます。

コントローラー間のカップリングを減らすというあなたの最初の本能は、良いものでした。

于 2013-06-22T23:11:16.833 に答える
0

1) RootViewController .h ファイルで、

+ (RootViewController *) sharedStore;

2) RootViewController .m ファイルで、

+ (RootViewController *) sharedStore
{
    static RootViewController *myStore = nil;

    if (!myStore) {
        myStore = [[RootViewController alloc] init];
    }
    return myStore;
}

3) AppDelegate.m ファイルに移動し、RootViewController をインポートします

#import RootViewController.h

4) AppDelegate.m ファイルで、ApplicationDidEnterBackground メソッドに移動し、次のように入力します。

[[RootViewController sharedStore] saveChanges];

5) RootViewController に saveChanges メソッドを実装します。

于 2013-06-22T23:08:53.677 に答える
0

AJ112の答えは次のとおりです。

  • からのシングルトンUIViewController。これはお勧めできません。
  • とのカップリングを作成しますUIApplication。これは、できるだけ避けるべきものです。

UIApplicationマルチタスクを処理する必要があるクラスから観察できる通知がいくつかあります。このSOの質問の答えを確認してください:

iphone 4 SDK:バックグラウンドモードからの復帰を検出

UIApplicationここに投稿されたすべての通知を確認できます。

http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006728-CH3-DontLinkElementID_4

于 2013-06-23T11:35:10.157 に答える