6

我目前正在开发一个使用异步下载的 iPad iOS 6 应用程序。为了接收进度信息,我使用了 delegate NSURLConnectionDownloadDelegate。下载和收到的进度

– connection:didWriteData:totalBytesWritten:expectedTotalBytes:

工作得很好。

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

– connectionDidFinishDownloading:destinationURL:

在 String 中接收到的目标 URL 看起来像“ /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);
}];
4

2 回答 2

0

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

是路径,而不是 URL。尝试 initWithContentsOfFile: 代替。

于 2012-12-07T12:01:05.580 回答
0

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

你也可以在这里看到相同问题的答案: NSURLConnectionDownloadDelegate 文件问题

于 2013-01-09T18:59:13.663 回答