具体而言,来自connectionDidFinishDownloading:destinationURL:
的{{1}}阻止<NSURLConnectionDownloadDelegate>
执行connection:DidReceiveData:
。
怎么会这样?
我在命名方法中输入错误,然后只是使用Xcode自动完成拼写错误,收到<NSURLConnectionDataDelegate>
而不是connectionDidFinishDownloading:destinationURL:
。
然后好几天我都没意识到为什么connectionDidFinishLoading
根本没被召唤。所以我修好了一切,现在问你:为什么是这样的?
回复的答案。
答案 0 :(得分:4)
这是一个没有详细记录的功能。 NSURLConnection有两个不同的委托协议:NSURLConnectionDataDelegate和NSURLConnectionDownloadDelegate。
如您所见,如果您在委托中实现了connectionDidFinishDownloading:destinationURL:这将告知NSURLConnection您要将数据下载到磁盘文件而非内存为NSData。目标磁盘文件位于应用程序缓存目录中,并保证在委托回调期间存在。这意味着代表应该将下载复制或移动到更持久的位置。
因此,如果从委托类实现中消除connectionDidFinishDownloading:destinationURL:,则会调用connection:DidReceiveData:。
这怎么不是最后一个故事。当您实现connectionDidFinishDownloading:destinationURL:然后想通过destinationURL访问下载的文件。不幸的是,文件不存在。知识,代表回调是针对报亭应用程序。如果您在Info.plist中指定时没有开发报刊亭应用程序,请远离NSURLConnectionDownloadDelegate。 Apple确认这是从iOS 5到iOS 7的错误。还没有修复:))