我刚刚将应用程序切换为使用NSOperationQueue来管理下载队列。我正在我的NSOperation子类中启动NSURLDownloads并处理所有委托回调。但是,当我去测试时,我发现没有调用任何委托方法。我在网上发现了一些关于这是NSURLDownload的已知问题的内容(我发现它只是将委托消息发布到主线程),但NSURLDownload类引用说:
“请注意,在启动相关NSURLDownload对象的异步加载操作的线程上调用这些委托方法。”
这让我觉得这个错误至少应该在Lion中得到修复。然而,我正在运行10.7.2,NSURLDownload对我来说绝对不正常。这里有什么我想念的吗?我没有在头文件中声明委托方法,但这不重要......是吗?
(我知道替代方案是使用NSURLConnection。但是,我真的希望能够使用NSURLDownload的下载进度功能。)
我将我的NSOperation子类设置为并发运行:我已经覆盖了start而不是main。
提前感谢您提供的任何帮助,
萨姆
P.S。我也将这个发布到Apple开发论坛,希望更多人能看到它。
答案 0 :(得分:0)
NSURLDownload向NSRunLoop注册以提供其回调。每个runloop都绑定到一个特定的线程。在你的情况下,在你的NSOperation中,你设置了NSURLDownload,它注册了runloop,用于你的操作正在运行的任何线程(这不是确定性的)。但是,在退出-start或-main方法后,线程(以及它的runloop)可能会被拆除。
有关类似问题,请参阅http://developer.apple.com/library/ios/#qa/qa1712/_index.html。