我已经实现了NSURLConnectionDownloadDelegate,NSURLConnectionDataDelegate委托方法,如下所示。
问题是在连接之后:didReceiveResponse:,connectionDidFinishDownloading:destinationURL:被调用但不是connectionDidFinishLoading:偶数连接:didReceiveData:未被调用。
当我评论NSURLConnectionDownloadDelegate方法时,其他三个方法被调用而没有任何问题。
我有一个NSURLConnections从服务器获取JSON。报亭使用NSURLConnectionDataDownloading委托方法来下载问题。
我该如何管理?
以下是我正在实施的所有委托方法
- (void)connection:(NSURLConnection *)connection didWriteData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long)expectedTotalBytes {
}
- (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL {
}
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
}
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
}
这是我的.h文件
@interface FirstTopViewController : UIViewController <NSURLConnectionDownloadDelegate, NSURLConnectionDataDelegate, NSURLConnectionDelegate, UITableViewDataSource, UITableViewDelegate>
这就是我连接服务器以获取JSON的方式
[[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];
这是根据需要下载问题的代码
NSURLRequest *urlReq = [NSURLRequest requestWithURL:myURL];
NKAssetDownload *asset = [currentIssue addAssetWithRequest:urlReq];
[asset downloadWithDelegate:self];
问题在于从服务器获取JSON的调用。问题下载工作正常。
答案 0 :(得分:2)
NSURLConnectionDataDelegate定义用于将数据加载到内存的委托方法。 NSURLConnectionDownloadDelegate:用于直接执行资源下载到磁盘文件的委托方法。
然后,如果您在委托中实现了connectionDidFinishDownloading:destinationURL:这将告知NSURLConnection您要将数据下载到磁盘文件而非内存为NSData。该 不会调用NSURLConnectionDataDelegate方法。如果从委托类实现中消除connectionDidFinishDownloading:destinationURL:,则会调用connection:DidReceiveData:。
对于您的情况,请实现两个不同用法的帮助代理。
答案 1 :(得分:1)
如果要在-connection:didReceiveData:
中获取JSON数据,则需要将委托设置为实现NSURLConnectionDataDelegate的对象;当您要将问题下载到文件时,委托需要是实现NSURLConnectionDownloadDelegate的对象。单个班级不能同时做到这两个。
这在NSURLConnection文档中没有得到很好的解释,但NSURLConnection.h
中的注释使其更加明确:
NSURLConnection可用于加载资源数据 直接到内存,在这种情况下一个 应提供NSURLConnectionDataDelegate,或者用于 在这种情况下,将资源数据直接下载到文件中 使用NSURLConnectionDownloadDelegate。代表是 由NSURLConnection保留,直到终止条件为止 遇到。这两个委托是逻辑上的子类 基本协议,NSURLConnectionDelegate。