Требуется дополнительное удержание на NSOperation - PullRequest
4 голосов
/ 28 июня 2010

Я занимаюсь разработкой приложения для iPad.Он использует NSOperation для загрузки чего-либо в фоновом режиме, обработанного NSOperationQueue.Я обнаружил, что, если я не добавлю сохранение в NSOperation, я попаду в сбой после выполнения действия операции.AddOperation NSOperationQueue говорит, что оно сохраняет NSOperation, а само NSOperation сохраняет целевой объект.Следовательно, я не понимаю, зачем мне нужно дополнительное сохранение.

Это не помешает моему прогрессу, за исключением того, что я пытаюсь реализовать шаблон отмены асинхронной операции и создания новой вместо нее.Я пока не могу разрабатывать на iPhone OS 4.0 (который предоставляет waitUntilFinished), поэтому мне нужен другой способ узнать, безопасно ли высвобождать мое дополнительное удержание (или найти способ вообще не иметь дополнительного удержания).

есть предложения?

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Как вы выполняете задачу «загрузить что-то в фоновом режиме»? Если вы используете асинхронный метод, который вызывает ваш объект NSOperation, это, вероятно, ваша проблема. Я предполагаю, что в основном методе вашей NSOperation вы начинаете загрузку с помощью асинхронного метода, и этот метод должен позже вызвать ваш NSOperation. Проблема заключается в том, что после возвращения основного метода операция NSO считается завершенной, поэтому, когда ваша асинхронная загрузка пытается перезвонить вашей операции NSOperation, она завершится неудачей, поскольку операция NSO уже завершена и освобождена. Ваше дополнительное удержание исправляет это, поддерживая NSOperation даже после того, как NSOperationQueue закончен с ним. Вы должны исправить это, используя метод синхронной загрузки внутри NSOperation.

Если вы уже используете метод синхронной загрузки в NSOperation, то я не уверен, в чем может быть ваша проблема.

0 голосов
/ 28 июня 2010

Использование очередей и асинхронных запросов в рамках ASIHTTPRequest - http://allseeing -i.com / ASIHTTPRequest / - помогло мне решить многие проблемы, возникшие у меня с NSOperationQueues и многими асинхронными загрузками.

Я придерживаюсь мнения, что если проблема была решена и решена хорошо, не пытайтесь решить ее снова!

...