applicationDidEnterBackground
が呼び出されるたびに (コア データを使用して) 保存する必要があるルート ビュー コントローラーに配列があります。デリゲート内のルート ビュー コントローラーのインスタンスにメッセージを送信するにはどうすればよいですか?
デリゲートをルートに設定したときにView Controllerへの参照を与えることを考えていましたが、それは非効率的です。これを行うより良い方法はありますか?
applicationDidEnterBackground
が呼び出されるたびに (コア データを使用して) 保存する必要があるルート ビュー コントローラーに配列があります。デリゲート内のルート ビュー コントローラーのインスタンスにメッセージを送信するにはどうすればよいですか?
デリゲートをルートに設定したときにView Controllerへの参照を与えることを考えていましたが、それは非効率的です。これを行うより良い方法はありますか?
ルート ビュー コントローラーで、ApplicationWillEnterBackground 通知を受け取るように登録します。ルートView Controllerは、この通知を受け取ると保存を実行できます。
コントローラー間のカップリングを減らすというあなたの最初の本能は、良いものでした。
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 メソッドを実装します。
AJ112の答えは次のとおりです。
UIViewController
。これはお勧めできません。UIApplication
。これは、できるだけ避けるべきものです。UIApplication
マルチタスクを処理する必要があるクラスから観察できる通知がいくつかあります。このSOの質問の答えを確認してください:
iphone 4 SDK:バックグラウンドモードからの復帰を検出
UIApplication
ここに投稿されたすべての通知を確認できます。