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
- NSURLConnection常用的代理方法
- 数据请求:NSURLConnection ,代理方法
- NSURLConnection代理方法线程问题
- 文件的下载(通过NSURLConnection代理)
- UITableView的常用代理方法
- UITableView的常用代理方法
- UIScrollerView的常用代理方法
- UITableView的常用代理方法
- UITableView的常用代理方法
- NSURLConnection设置代理
- 输入框的常用代理方法
- UIApplication常用的代理方法和属性
- IOS UITextField常用的代理方法总结
- UITextField的一些常用代理方法
- ios-NSURLConnectionDataDelegate常用的代理方法
- 使用NSURLConnection的同步方法下载
- iOS中NSURLConnection、NSURLSession 常用请求(GET、POST)方法总结
- UISearchbar 常用代理方法
- 黑马程序员_Java基础_面向对象
- Tcptrack跟踪 TCP连接(centos6.5)
- 设置字符串的属性
- 留个脚印
- 更新第二篇 集合框架
- NSURLConnection常用的代理方法
- Android代码混淆需要知道以及注意的事情
- 经典SQL语句大全
- FreeGLUT Tips: Resolve compile issue: error LNK1104: cannot open file 'freeglutd.lib'
- 值类型和引用类型的区别
- openssl升级到1.0.1g的过程
- html5新标签应用示例一
- AndroidManifest.xml——activity(三)
- c#中volatile关键字的作用(zz)