我正在浏览apple.developer.com网站上的NSURLConnectionDelegate
类引用。在那里,我意识到像connectionDidFinishLoading
这样的函数在IOS类中不存在,但在MAC库中存在。
然后当我尝试在XCODE中为IOS应用程序使用这些功能时,自动完成将无法完成它,但功能确实按预期工作。
任何人都可以解释这些是如何工作的,这会在部署应用时导致任何问题。 谢谢!
答案 0 :(得分:4)
这有点奇怪。 NSURLConnectionDelegate
的文档说:
NSURLConnectionDelegate协议定义了可选方法 由NSURLConnection对象的代表实现。
操作词有可选。
但是,NSURLConnection
类引用说:
NSURLConnection的委托方法 - 由。定义 NSURLConnectionDelegate协议 - 允许对象接收 有关URL请求的异步加载的信息回调。 其他委托方法提供允许委托的设施 自定义执行异步URL加载的过程。这些 委托方法在启动的线程上调用 相关NSURLConnection对象的异步加载操作。
这两个似乎自相矛盾。
最后,“URL加载系统编程指南”说:
为了下载URL的内容,应用程序需要 提供委托对象,该对象至少实现以下内容 委托方法:connection:didReceiveResponse:, connection:didReceiveData:,connection:didFailWithError:and connectionDidFinishLoading:
如果没有这些委托方法,NSURLConnection
对于NSURLConnection
的期望是非常无用的。
查看NSURLConnectionDataDelegate
的头文件,看来有一个@optional
协议,列出了所需的委托方法。但是,它们在标题中标记为NSURLConnectionDataDelegate
。根据{{1}}的定义,它必须实施NSURLConnectionDelegate
。
如果您声明您的委托类实现NSURLConnectionDataDelegate
协议,Xcode将自动完成委托方法。
这对我来说都感觉有些混乱。 Cocoa / Cocoa Touch API通常比这更加整洁。
我当然没有看到Apple可以拒绝使用这些委托方法的应用程序,因为NSURLConnection
如果没有它们就行不通。
答案 1 :(得分:1)
请记住,如果您发现API不一致,则需要使用RADAR提交错误报告,因为Black Pixel的友好人员解释说:RADAR or GTFO