Почему addObserver мгновенно падает? - PullRequest
1 голос
/ 14 января 2012

У меня есть различные виды операций (производных от 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.

1 Ответ

0 голосов
/ 15 января 2012

БАХ!Вся проблема заключалась в том, что в методе инициализации операции не удалось вызвать [super init].

Спасибо всем, кто все равно ответил.

...