【问题标题】:NSURLDownloadDelegate not being called when download is initiated from NSOperation从 NSOperation 启动下载时未调用 NSURLDownloadDelegate
【发布时间】:2011-12-19 04:33:22
【问题描述】:

我刚刚切换了我的应用程序以使用 NSOperationQueue 来管理下载队列。我在我的 NSOperation 子类中启动 NSURLDownloads,并处理它们的所有委托回调。但是,当我刚去测试它时,我发现没有调用任何委托方法。我在网上找到了一些关于 NSURLDownload 的已知问题的资料(我发现它只将委托消息发布到主线程),但 NSURLDownload 类参考说:

“请注意,这些委托方法是在为关联的 NSURLDownload 对象启动异步加载操作的线程上调用的。”

这让我觉得这个错误至少应该在 Lion 中得到修复。然而我正在运行 10.7.2,并且 NSURLDownload 对我来说绝对不正确。我在这里缺少什么吗?我没有在头文件中声明委托方法,但这应该没关系……是吗?

(我知道另一种方法是使用 NSURLConnection。但是,我真的希望能够使用 NSURLDownload 的下载进度功能。)

我将我的 NSOperation 子类设置为同时运行:我覆盖了 start 而不是 main。

在此先感谢您对此提供的任何帮助,

山姆

附:我也将其发布到 Apple 开发者论坛,希望更多人能看到它。

【问题讨论】:

    标签: macos cocoa nsoperation


    【解决方案1】:

    NSURLDownload 向 NSRunLoop 注册以提供其回调。每个 runloop 都绑定到一个特定的线程。在您的情况下,在您的 NSOperation 中,您设置了 NSURLDownload,它在 runloop 中注册您的操作恰好在其上运行的任何线程(这不是确定性的)。但是,在您退出 -start 或 -main 方法后,线程(以及它的 runloop)可能会被拆除。

    请参阅http://developer.apple.com/library/ios/#qa/qa1712/_index.html 了解类似问题。

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多