NSURLDownloadDelegate не вызывается, когда загрузка инициируется из NSOperation - PullRequest
0 голосов
/ 19 декабря 2011

Я только что переключил свое приложение, чтобы использовать NSOperationQueue для управления очередью загрузок.Я инициирую загрузки NSURLDown и обрабатываю все их обратные вызовы делегатов из моего подкласса NSOperation.Однако, когда я только пошел, чтобы проверить это, я обнаружил, что ни один из методов делегата не вызывается.В Интернете я нашел кое-что о том, как это известная проблема с NSURLDownload (я обнаружил, что он отправляет только сообщения делегатов в основной поток), но ссылка на класс NSURLDownload гласит:

"Обратите внимание, что эти методы делегатоввызван в потоке, который запустил асинхронную операцию загрузки для связанного объекта NSURLDownload. "

Это заставляет меня думать, что ошибка, по крайней мере, должна была быть исправлена ​​в Lion.Тем не менее, я использую 10.7.2, и NSURLDownload определенно не ведет себя правильно для меня.Есть что-то, чего я здесь не хватает?Я не объявлял методы делегата в заголовочном файле, но это не должно иметь значения ... не так ли?

(я понимаю, что альтернативой для меня было бы использование NSURLConnection. Однако яочень надеюсь, что смогу использовать возможности процесса загрузки NSURLDownload.)

У меня настроен подкласс NSOperation для одновременной работы: я переопределил запуск вместо main.

Заранее спасибоза любую помощь, которую вы можете дать мне,

Сэм

PS Я также публикую это на форумах разработчиков Apple, в надежде, что больше людей увидят это.

1 Ответ

0 голосов
/ 19 декабря 2011

NSURLDownload регистрируется с помощью NSRunLoop для обеспечения своих обратных вызовов.Каждый runloop привязан к определенному потоку.В вашем случае в вашей NSOperation вы настраиваете NSURLDownload, который регистрируется в runloop для любого потока, в котором выполняется ваша операция (которая не является детерминированной).Однако после выхода из метода -start или -main поток (и его цикл выполнения), вероятно, оборван.

См. http://developer.apple.com/library/ios/#qa/qa1712/_index.html для аналогичной проблемы.

...