Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 来自一个协议的委托方法如何阻止来自另一个协议的另一个方法的执行?_Objective C_Nsurlconnection - Fatal编程技术网

Objective c 来自一个协议的委托方法如何阻止来自另一个协议的另一个方法的执行?

Objective c 来自一个协议的委托方法如何阻止来自另一个协议的另一个方法的执行?,objective-c,nsurlconnection,Objective C,Nsurlconnection,具体而言,中的connectiondifinishdownloading:destinationURL:阻止了中的连接:direceivedata:的执行。 怎么可能呢 我在命名方法中输入错误,然后用Xcode自动完成键入,收到的是connectiondFinishDownloading:destinationURL:,而不是connectiondFinishLoading。 然后有好几天我都不明白为什么根本没有调用连接:DidReceiveData:。所以我把所有的东西都修好了,现在问你:为什

具体而言,
中的
connectiondifinishdownloading:destinationURL:
阻止了
中的
连接:direceivedata:
的执行。 怎么可能呢

我在命名方法中输入错误,然后用Xcode自动完成键入,收到的是
connectiondFinishDownloading:destinationURL:
,而不是
connectiondFinishLoading
。 然后有好几天我都不明白为什么根本没有调用
连接:DidReceiveData:
。所以我把所有的东西都修好了,现在问你:为什么


Thx用于响应。

这是一个没有详细记录的功能。NSURLConnection有两种不同的委托协议:NSURLConnectionDataDelegate和NSURLConnectionDownloadDelegate

  • NSURLConnectionDataDelegate:用于将数据加载到内存的委托方法。这些委托方法都是可选的
  • NSURLConnectionDownloadDelegate:用于直接将资源下载到磁盘文件的委托方法。所有方法都是可选的,但ConnectionIDFinishDownloading:destinationURL:除外,必须实现该方法才能通知代理完成下载的位置
如您所见,如果您在代理中实现了ConnectiondFinishDownloading:destinationURL:。这将通知NSURLConnection您希望将数据下载到磁盘文件中,而不是作为NSData下载到内存中。目标磁盘文件位于应用程序缓存目录中,并保证在代理回调期间存在。这意味着委托应该将下载复制或移动到更持久的位置

因此,如果从委托类实现中删除ConnectiondFinishDownloading:destinationURL:,则将调用connection:DidReceiveData:


无论如何,这不是最后一个故事。当您实现ConnectionIDFinishDownloading:destinationURL:并希望通过destinationURL访问下载的文件时。不幸的是,文件不在那里。明白了,代理回调用于报摊应用程序。如果在Info.plist中指定时未开发报摊应用程序,请远离NSURLConnectionDownloadDelegate。苹果确认这是iOS 5到iOS 7的一个bug。仍然没有修复:)

这是一个没有很好文档记录的功能。NSURLConnection有两种不同的委托协议:NSURLConnectionDataDelegate和NSURLConnectionDownloadDelegate

  • NSURLConnectionDataDelegate:用于将数据加载到内存的委托方法。这些委托方法都是可选的
  • NSURLConnectionDownloadDelegate:用于直接将资源下载到磁盘文件的委托方法。所有方法都是可选的,但ConnectionIDFinishDownloading:destinationURL:除外,必须实现该方法才能通知代理完成下载的位置
如您所见,如果您在代理中实现了ConnectiondFinishDownloading:destinationURL:。这将通知NSURLConnection您希望将数据下载到磁盘文件中,而不是作为NSData下载到内存中。目标磁盘文件位于应用程序缓存目录中,并保证在代理回调期间存在。这意味着委托应该将下载复制或移动到更持久的位置

因此,如果从委托类实现中删除ConnectiondFinishDownloading:destinationURL:,则将调用connection:DidReceiveData:

无论如何,这不是最后一个故事。当您实现ConnectionIDFinishDownloading:destinationURL:并希望通过destinationURL访问下载的文件时。不幸的是,文件不在那里。明白了,代理回调用于报摊应用程序。如果在Info.plist中指定时未开发报摊应用程序,请远离NSURLConnectionDownloadDelegate。苹果确认这是iOS 5到iOS 7的一个bug。仍未修复:)