0

我已经建立了一个连接以将此 mp4 剪辑下载到我的设备,并且我正在使用以下委托函数以“流”类型的方式存储数据。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"BuckBunny.mp4"];

    [data writeToFile:filePath atomically:YES];
}

但是,当5.3M​​B的文件下载完成后,我检查了保存文件的大小,它只有1KB,因此无法播放。我只是保存一小部分而不是我想要的全部吗?我需要做些什么不同的事情?

4

2 回答 2

2

您需要在收到数据时连接数据。查看 NSMutableData 对象。数据完成后,将逻辑放入 connectionDidFinishLoading 委托方法中。

使用此示例,其中 receivedData 是您在开始下载之前初始化的属性。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"BuckBunny.mp4"];

    [receivedData writeToFile:filePath atomically:YES];
    [connection release];
}
于 2012-05-09T16:08:57.723 回答
2

上面的答案将在下载时将整个视频保存在内存中。虽然这对于小视频可能很好,但不能用于较大的视频。您可以将数据附加到本地驱动器上的文件中,如下所示:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:self.path];
    [handle seekToEndOfFile];
    [handle writeData:data];
}
于 2014-01-08T15:26:08.460 回答