NSURLConnection常用的代理方法

来源:互联网 发布:斗地主出牌算法 编辑:程序博客网 时间:2024/06/06 16:46

NSURLConnection的代理Protocol定义有三类:NSURLConnectionDelegate、NSURLConnectionDataDelegate和NSURLConnectionDownloadDelegate。

  • NSURLConnectionDelegate:所有类型NSURLConnection的基础代理方法,都是Optional的方法,主要是涉及SSL/TSL加密的相关接口。
@protocol NSURLConnectionDelegate <NSObject>@optional//请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection;- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace NS_DEPRECATED(10_6, 10_10, 3_0, 8_0, "Use -connection:willSendRequestForAuthenticationChallenge: instead.");- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge NS_DEPRECATED(10_2, 10_10, 2_0, 8_0, "Use -connection:willSendRequestForAuthenticationChallenge: instead.");- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge NS_DEPRECATED(10_2, 10_10, 2_0, 8_0, "Use -connection:willSendRequestForAuthenticationChallenge: instead.");@end
  • NSURLConnectionDataDelegate:用于将网络请求的数据存放到内存中(以NSData的形式)的代理方法。所有方法都是Optional的。
@protocol NSURLConnectionDataDelegate <NSURLConnectionDelegate>@optional- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;//当接收到服务器的响应(连通了服务器)时会调用- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;//当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;- (NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request;- (void)connection:(NSURLConnection *)connection   didSendBodyData:(NSInteger)bytesWritten                                                 totalBytesWritten:(NSInteger)totalBytesWritten                                         totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite;- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse;//当服务器的数据加载完毕时就会调用- (void)connectionDidFinishLoading:(NSURLConnection *)connection;@end
  • NSURLConnectionDownloadDelegate:用于将网络资源直接保存到文件中的代理方法,除了connectionDidFinishDownloading:destinationURL:都是Optional的方法。connectionDidFinishDownloading:destinationURL回调可以告知你下载的网络数据最终存放的文件位置,正常都是在iPhone应用沙盒的/tmp目录下。
@protocol NSURLConnectionDownloadDelegate <NSURLConnectionDelegate>@optional- (void)connection:(NSURLConnection *)connection didWriteData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long) expectedTotalBytes;- (void)connectionDidResumeDownloading:(NSURLConnection *)connection totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long) expectedTotalBytes;@required- (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *) destinationURL;@end
  • 由于生成NSURLConnectin对象传入delegate参数时类型就是id,而不是传统id<*Delegate>形式,那么如何确定当前代理实现的是什么类型的NSURLConnectionDelegate代理呢?方法也很诡异,如果你的代理实现了connectionDidFinishDownloading:destinationURL:,那么就表示你要实现的是NSURLConnectionDownloadDelegate,NSURLConnectionDataDelegate中的connection:DidReceiveData就不会得到回调,即使你实现了它。道理很简单,这两类代理一个是用于将下载数据保存到文件上,另一个是保存到内存中,只能两者居其一。

  • 故事还没有结束 ,如果你实现了connectionDidFinishDownloading:destinationURL并且想通过回到得到的destinationURL读取保存数据的文件时,令人惊讶的发现这个文件居然不存在,因为这类NSURLConnectionDataDelegate回调是用于Newsstand类型的App开发的,用于将杂志等信息保存到本地文件。实在想不通为什么只有Newsstand类型App才能用这组接口,很多开发者早已发了bug报告给Apple,Apple也已经确认,但是从iOS5到了iOS7,这个“bug”还是没有被修复。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 铁锅炒菜菜发黑怎么办 红豆沙馅太稀了怎么办 买的豆沙馅太稀怎么办 做的豆馅稀了怎么办 包豆沙包馅稀了怎么办 软件自定义权限重名怎么办 窗户外有垃圾桶怎么办 菜地里有蚂蚁怎么办 灯光吸引的飞虫怎么办 广告机格式化了怎么办 proe约束冲突了怎么办 中午考试想睡觉怎么办 喝了红茶睡不着怎么办 考试前状态不好怎么办 考前紧张睡不着觉怎么办 通宵失眠第二天怎么办 考试前睡不着觉怎么办 一到晚上睡不着怎么办 明天考试听力差怎么办 天天晚上睡不着觉怎么办 因紧张睡不着觉怎么办 房卡找不到了怎么办 马代不会英文怎么办 剩下的蒸米饭怎么办 临时牌照违法了怎么办 打12345不管用怎么办 省政府改变了中央文件怎么办 应聘时学历不够怎么办 做导游学历不够怎么办 市长热线打不通怎么办 12315网站不受理怎么办 法律文书生效前转后财产怎么办 打12345投诉没用怎么办 单位医保停了怎么办 iphonex开不了机怎么办 会计证三年没检怎么办 银行工作人员态度不好怎么办 生殖保健服务证怎么办 关机后自动开机怎么办 大连卖房户口怎么办 在警务室被辅警骂了怎么办