У меня есть некоторый код iPhone SDK 4.0, который инициализирует NSOperationQueue
, а затем добавляет три класса (ClassA
, ClassB
и ClassC
) для запуска один за другим. ClassA
, ClassB
и ClassC
являются подклассами NSOperation
.
Соответствующий код указан ниже.
ClassA *classA = [[ClassA alloc] init];
ClassB *classB = [[ClassB alloc] init];
ClassC *classC = [[ClassC alloc] init];
[classB addDependency:classA];
[classC addDependency:classB];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:classA];
[queue addOperation:classB];
[queue addOperation:classC];
[classA release];
[classB release];
[classC release];
[queue release];
Причина зависимости заключается в том, что classB
должен запускаться только в том случае, если classA
успешно завершит свою работу. Аналогично, classC
должен запускаться только в том случае, если classB
завершается успешно.
В настоящий момент мне трудно понять, как, например, предотвратить запуск classB
, если classA
не завершится успешно. Продолжая этот пример, я думал о том, чтобы как-то вызвать [NSOperationQueue cancelAllOperations]
из classA
, но я не знаю, как получить указатель на родителя NSOperationQueue
из classA
(который является подпрограммой NSOperation
). учебный класс). Это была только моя первоначальная мысль, поэтому я буду открыт для любых других лучших предложений для достижения того же результата!
В каждом из классов имеется условный код, позволяющий определить, правильно ли они завершились - на данный момент они просто отправляют NSLogging «Success» или «Fail» на консоль для целей отладки. В идеальном мире я просто хотел бы иметь возможность заменить оператор NSLog(@"Fail")
в каждом классе некоторым кодом, который остановит запуск всех других классов в NSOperationQueue.
Любые предложения будут приветствоваться (и приветствуются).