Ios6 如何使用ConnectiondFinishDownloading:destinationURL:和ConnectiondFinishLoading:
我已经实现了NSURLConnectionDownloadDelegate和NSURLConnectionDataDelegate两种方法,如下所示 问题是,在调用了connection:didReceiveResponse:,connectionDidFinishDownloading:destinationURL:之后,但没有调用connectionDidFinishLoading:偶数连接:didReceiveData: 当我对NSURLConnectionDownloadDelegate方法进行注释时,调用其他三个方法时没有任何问题 我有一个从服务器获取JSON的NSURLConnections。报摊使用NSURLConnectionDataDownloading委托方法下载问题 我如何管理这个 下面是我正在实现的所有委托方法Ios6 如何使用ConnectiondFinishDownloading:destinationURL:和ConnectiondFinishLoading:,ios6,nsurlconnection,newsstand-kit,nsurlconnectiondelegate,Ios6,Nsurlconnection,Newsstand Kit,Nsurlconnectiondelegate,我已经实现了NSURLConnectionDownloadDelegate和NSURLConnectionDataDelegate两种方法,如下所示 问题是,在调用了connection:didReceiveResponse:,connectionDidFinishDownloading:destinationURL:之后,但没有调用connectionDidFinishLoading:偶数连接:didReceiveData: 当我对NSURLConnectionDownloadDelegate
- (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>
这是用于在需要时下载问题的代码
NSURLRequest *urlReq = [NSURLRequest requestWithURL:myURL];
NKAssetDownload *asset = [currentIssue addAssetWithRequest:urlReq];
[asset downloadWithDelegate:self];
问题在于从服务器获取JSON的调用。问题下载工作正常。当您想在
-connection:didReceiveData:
中获取JSON数据时,需要将委托设置为实现NSURLConnectionDataDelegate的对象;当您要将问题下载到文件时,委托需要是实现NSURLConnectionDownloadDelegate的对象。一个类不能同时完成这两个任务
这在NSURLConnection文档中没有很好地解释,但是NSURLConnection.h
中的注释使其更加明确:
NSURLConnection可用于加载资源数据
直接到内存,在这种情况下
应提供NSURLConnectionDataDelegate,或用于
将资源数据直接下载到文件,在这种情况下
使用NSURLConnectionDownloadDelegate。代表是
由NSURLConnection保留,直到终端状态消失
遇到。这两个委托在逻辑上是
基本协议NSURLConnectionLegate
NSURLConnectionDataDelegate定义用于将数据加载到内存的委托方法。 NSURLConnectionDownloadDelegate:用于直接将资源下载到磁盘文件的委托方法 然后,如果您在代理中实现了ConnectiondFinishDownloading:destinationURL:。这将通知NSURLConnection您希望将数据下载到磁盘文件中,而不是作为NSData下载到内存中。这个 不会调用NSURLConnectionDataDelegate方法。如果从委托类实现中删除ConnectiondFinishDownloading:destinationURL:,则将调用connection:DidReceiveData:
对于您的情况,为不同的用法实现两个助手委托。帮助很大。谢谢
NSURLRequest *urlReq = [NSURLRequest requestWithURL:myURL];
NKAssetDownload *asset = [currentIssue addAssetWithRequest:urlReq];
[asset downloadWithDelegate:self];