NSURLConnectionDownloadDelegate destinationURL

时间:2012-12-07 11:35:40

标签: ios ios6 nsurlconnection nsdata nsurlconnectiondelegate

我目前正在开发使用异步下载的iPad iOS 6应用程序。 为了接收进度信息,我使用了代理人NSURLConnectionDownloadDelegate

收到的下载和进度
– connection:didWriteData:totalBytesWritten:expectedTotalBytes:

工作正常。

但是,下载完成后,我不知道如何从委托方法提供的NSURL destinationURL中提取数据

– connectionDidFinishDownloading:destinationURL:

String中收到的destinationURL看起来像 " /private/var/mobile/Applications/7CB3B194-9E79-4F0B-ACFD-7B87AA8C7BAF/tmp/filename.mp4"

然后我尝试从给定的NSURL中提取数据:

NSData *data = [[NSData alloc] initWithContentsOfURL:destinationURL];

然而数据是空的......

NSLog(@"data Size: %@", data.length);     //prints out 0

使用NSURLConnectionDownloadDelegate让某人有同样的问题吗?任何想法如何解决?


编辑:我尝试先复制文件,然后按照建议使用[NSData initWithContentsOFFile],但数据大小仍为0.

- (void) connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL
{

[[NSFileManager defaultManager] copyItemAtPath:destinationURL.path toPath:DEST_PATH error:nil];

NSData *data = [[NSData alloc] initWithContentsOfFile:DEST_PATH];

NSLog(@"data Size: %i", data.length); //still returns 0..
}

EDIT2: 我可以在使用NSData sendAsynchronousRequest方法时提取NSURLConnection。但是像这样,我无法确定下载的进度......

[NSURLConnection sendAsynchronousRequest:theRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
if (data){
NSLog(@"Size of the data: %i Bytes(s)", data.length); //works fine
[data writeToFile:DEST_PATH atomically:YES];
//From this point i can use the file at DEST_PATH

NSLog(@"Succeeded!");
}
else if (error)
NSLog(@"%@",error);
}];

2 个答案:

答案 0 :(得分:0)

  

/private/var/mobile/Applications/7CB3B194-9E79-4F0B-ACFD-7B87AA8C7BAF/tmp/filename.mp4

是路径,而不是URL。尝试使用initWithContentsOfFile:而不是。

答案 1 :(得分:0)

检查文件是否存在。 我有同样的问题,我必须使用NSURLConnectionDataDelegate手动保存数据,这就是原因: 与某些文件扩展名相关的NSURLConnectionDownloadDelegate出错。

此外,您可以在此处看到相同问题的答案: NSURLConnectionDownloadDelegate file issue