У меня есть различные виды операций (производных от NSOperation) для выполнения асинхронных запросов через Интернет. Как правило, когда они заканчиваются, я определяю их свойство isFinished.
Когда один конкретный тип операции завершается, я хочу создать последующий тип операции, используя информацию из первого. Но когда я это делаю, вызов addObserver для операции приводит к сбою приложения с плохим доступом. Поскольку наблюдатели вызываются в случайном потоке, я попытался создать последующую операцию и установить наблюдателя в главном потоке. Нет разницы. Это делается в Наблюдении за значением для ключа:
GetMessagesOperation* msgOp =
[[GetMessagesOperation alloc] initWithUserID:_user.getID()
sinceLast:true
includeSystem:true
includeUser:false
skipRows:0
maxCount:50
DBManager:_pDatabaseMgr];
[msgOp addObserver:self
forKeyPath:@"isFinished"
options:0
context:getMessageContext];
[_operationQueue addOperation:msgOp];
[msgOp release];
Контекст является пустым * для строки; Я использую тот же синтаксис для многих других операций, которые работают нормально. Вот как определяются контексты:
static void* systemInfoContext = (void*)@"sys";
static void* validateUserContext = (void*)@"user";
static void* getMessageContext = (void*)@"msg";
У кого-нибудь есть догадки? Спасибо!
Редактировать: Спасибо за ответ. Там нет сгенерированного журнала сбоев. Он просто завершает работу с ошибочным доступом к строке addObserver, и это происходит независимо от того, выполняюсь ли я в главном потоке или в фоновом потоке, в который введен наблюдатель ValveForKeyPath.