Почему мой объект NSOperation не может получить асинхронный обратный вызов? - PullRequest
0 голосов
/ 18 августа 2011

Я подкласс NSOperation для реализации моей операции. Давайте назовем его MyOperation.

В реализации MyOperation я переопределяю основную функцию, и внутри нее я создаю некоторые асинхронные сетевые вещи и устанавливаю делегат на себяобъект операции). Но объекты операций никогда не получают эти обратные вызовы делегата, почему?Я не установил завершенный до получения обратного вызова.

Или NSOperation просто не может этого сделать?

Я обнаружил, что если я вручную "запущу" операцию, она будет работать.Но если я добавлю его в очередь операций, операция будет выполнена, но я просто не смогу получить эти обратные вызовы.

1 Ответ

0 голосов
/ 19 августа 2011

Если вы настраиваете свой обратный вызов в методе main следующим образом:

-(void)main{
    // setup
    object.delegate = self
}

, тогда ваш основной метод продолжит выполнение, завершится и уйдет до того, как делегат сможет завершить обратный вызов,Вам либо нужно переопределить метод start в NSOperation и вручную обработать свойства isFinished и isExecuting, либо вам нужно найти способ, как вызвать метод делегата для объекта, который не исчезнет.

См. Ссылку класса NSOperation для получения полной информации о переопределении правильных методов и уведомлений KVC, чтобы заставить его работать.

...