Я использую следующую функцию, чтобы уведомить мое приложение после завершения операции в 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];
не может быть выполнен. Но каково решение этой проблемы, поскольку я хочу, чтобы пользователь мог выполнять любое действие после выполнения запроса, а также выполнять действие, запланированное после завершения задачи, назначенной операции.
Это действительно возможно?
Спасибо заранее.