次の関数を使用して、nsoperationqueueでの操作が終了した後にアプリケーションに通知を受け取り、操作の結果に応じてタスクをスケジュールできるようにしています。私が使用しているもの:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if([keyPath isEqual:@"isFinished"] && _operation == object)
{
NSLog(@"Our Thread Finished!");
[_operation removeObserver:self forKeyPath:@"isFinished"];
[self performSelectorOnMainThread:@selector(showDialog) withObject:nil waitUntilDone:YES];
}
}
私の質問は、これらの操作に割り当てられたタスクのほとんどは、他のボタンをタップしようとしたり、基本的にアクションを実行しようとしたりすると、データの解析であるため、次の例外が発生します。
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<Settings: 0x21b970>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: isFinished
私はメインスレッドで他のことをしようとしているので、メインスレッドへの呼び出しが原因であることを完全に理解しています。
[self performSelectorOnMainThread:@selector(showDialog) withObject:nil waitUntilDone:YES];
実行に失敗します。しかし、この問題の解決策は、ユーザーがリクエストを行った後に任意のアクションを実行できるようにすることと、操作に割り当てられたタスクを完了した後にスケジュールされたアクションを実行できるようにすることの両方を許可することです。
それは本当に可能ですか?
よろしくお願いします。