私のアプリケーションでは、モーダルビューコントローラーとして表示されるログイン画面があります。ユーザーが正常にログインすると、モーダルビューが閉じられ、アプリケーションのデータがWebサービスから更新されます。その後、ユーザーはダウンロードした新しいデータを操作できます。
定期的に、サーバーに同期して戻す必要のあるデータがあるかどうかを確認します。AppDelegate
これを行うには、変更を定期的にポーリングする一連の関数を使用します。ポーリングを開始する方法が1つあります。
- (void) startBackgroundSync {
if (self.queue == nil) {
self.queue = [[NSOperationQueue alloc] init];
}
[self performSelector:@selector(doBackgroundSync) withObject:nil afterDelay:5.f];
}
そして、-doBackgroundSync
実際に変更をチェックし、同期操作をに追加しますNSOperationQueue
。次に、次のようにリセットされます。
-(void) doBackgroundSync {
NSLog(@"Check for changes");
// check for changes and add operation to queue
[self performSelector:@selector(doBackgroundSync) withObject:nil afterDelay:5.f];
}
当初は-startBackgroundSync
、モーダルログインビューコントローラから呼び出しました(却下される前)。次に、他のいくつかの設定を変更し、モーダルビューコントローラーを閉じます。ログインビューコントローラは、閉じられても解放されませんが、AppDelegateによって保持されます(後でアプリケーションを「再ロック」する必要がある場合があります)。モーダルビューコントローラが却下された後、-doBackgroundSync
呼び出されることはありませんでした。-startBackgroundSync
モーダルビューコントローラが閉じられた後に表示されるメインビューコントローラに呼び出しを置く-doBackgroundSync
と、期待どおりに継続的に呼び出されます。
この動作の原因は何ですか?-dismissModalViewController
そのViewControllerによって作成された実行ループ内の何かを無効にする何かがありますか?