Ios6 如何使用ConnectiondFinishDownloading:destinationURL:和ConnectiondFinishLoading:

Ios6 如何使用ConnectiondFinishDownloading:destinationURL:和ConnectiondFinishLoading:,ios6,nsurlconnection,newsstand-kit,nsurlconnectiondelegate,Ios6,Nsurlconnection,Newsstand Kit,Nsurlconnectiondelegate,我已经实现了NSURLConnectionDownloadDelegate和NSURLConnectionDataDelegate两种方法,如下所示 问题是,在调用了connection:didReceiveResponse:,connectionDidFinishDownloading:destinationURL:之后,但没有调用connectionDidFinishLoading:偶数连接:didReceiveData: 当我对NSURLConnectionDownloadDelegate

我已经实现了NSURLConnectionDownloadDelegate和NSURLConnectionDataDelegate两种方法,如下所示

问题是,在调用了connection:didReceiveResponse:,connectionDidFinishDownloading:destinationURL:之后,但没有调用connectionDidFinishLoading:偶数连接:didReceiveData:

当我对NSURLConnectionDownloadDelegate方法进行注释时,调用其他三个方法时没有任何问题

我有一个从服务器获取JSON的NSURLConnections。报摊使用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>
这是用于在需要时下载问题的代码

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];