iOS中如何实现异步向文件追加数据?

3

我想从网络路径下载图片。但由于存在大文件的风险,我认为将部分NSdata块直接写入文档目录中的文件可能是一个好主意。这是否可行? 我已经设置了异步URLConnection。它会回调到一个代理。

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

方法。 在这种方法中,我想直接将到目前为止已下载的“数据”追加到磁盘上的文件中。 你能帮忙一下吗? 如果不需要使用低级C语言就可以实现,那就太完美了。

1个回答

7

我从这个苹果文档中了解到,尽管我从未尝试过,但我建议

@property (nonatomic,strong) NSFileHandle *handle;


//somewhere in a init or viewDidLoad
self.handle = [NSFileHandle fileHandleForUpdatingAtPath:filePath]

-(void)connection:(NSURLConnection *)connection 
   didReceiveData:(NSData *)data
{
    [handle seekToEndOfFile];
    [handle writeData:data];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [self.handle closeFile]; 
} 

注意:filePath必须是现有文件的有效路径,有很多帖子处理创建文件的问题。

3
建议有效,谢谢。我想补充一点,就是在那个方法中放置[self.handle closeFile]是不正确的。因为在下一次调用时,由于文件已经关闭(来自上一次调用),将无法附加下一个数据块。 对此,-(void)connectionDidFinishLoading:(NSURLConnection *)connection { [self.handle closeFile]; } 是有用的。 - Earl Grey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接