モーダルビューコントローラーが表示され、インターネット上のサービスをチェックし、完了したら自分自身を閉じます。ペン先には、アクティビティインジケータと、何が起こっているかをユーザーに通知するためのラベルが含まれています。
更新が完了すると、ラベルが「更新完了」に変わり、ViewControllerが閉じられます。ただし、テキストが消える前にユーザーがテキストを確認できるように、却下を数秒間遅らせたいと思います。だから私はこれをしました:
#pragma mark - AssetLoaderServiceDelegate
- (void)assetLoaderServiceDidFinishLoading:(AssetLoaderService *)service
{
[self.spinner stopAnimating];
self.infoLabel.text = @"Update complete";
[self performSelector:@selector(dismissUpdater) withObject:nil afterDelay:2.0];
}
- (void)dismissUpdater
{
[self dismissModalViewControllerAnimated:YES];
}
しかし、何らかの理由で、セレクターが呼び出されることはありません。私もモードで実行してみましたNSRunLoopCommonModes
が、それも機能しません。
私は何か間違ったことをしているに違いないが、何がわからない...
編集:デリゲートコールバックは実際には内でNSOperationQueue
発生しています。これは、メッセージをView Controllerに送り返すときに、同じスレッド上にないことを意味している可能性がありますか?だから私は試しました
[self performSelector:@selector(downloadQueueComplete) withObject:nil afterDelay:0.0 inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
に続く
- (void)downloadQueueComplete
{
[delegate assetLoaderServiceDidFinishLoading:self];
}
しかし、performSelectorはここでも機能していないようです。