部分阅读NSData

时间:2015-07-01 12:22:29

标签: ios out-of-memory

我正在ios8中实现扩展。在此import函数中返回一个url。我需要从中读取数据并保存在我的应用程序中。

这是代码。

NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
    NSError *error;
    __block NSData *data;
    [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {
        data = [NSData dataWithContentsOfURL:newURL];
//saving in document directory
    }];

我的问题是,如果文件太大,dataWithContentsOfURL会因内存不足而导致崩溃。

我想要一种方法从部分读取数据,保存在我的文档中,然后阅读下一部分并继续追加。因此它不会有记忆问题。

有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

找到两个解决方案。 1-使用NSURLConnection。使用 $newPortfolio = $portfolio->create( array( "first_name" => $request->input('first_name'), )); $tags = $request->input('tags'); $newPortfolio->tags()->attach($tags); 在文件中写入数据。

NSFileHandle
  1. 而不是在数据中转换然后保存。用于复制文件。

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data1{
    //    [data appendData:data1];
        [self.currentFileHandle seekToEndOfFile];
        [self.currentFileHandle writeData:data1];
    }
    
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection{
        [self.currentFileHandle closeFile];
        self.currentFileHandle = nil;
    }
    

    [fileCoordinator coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingWithoutChanges错误:nil byAccessor:^(NSURL * newURL){

  2. NSFileManager * fileManager = [[NSFileManager alloc] init];

    NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
    

    BOOL success = [fileManager copyItemAtURL:url toURL:urlDestination error:& error]; if(success){ } }];

      

    我使用了第二种解决方案。抱歉错误对齐。我尝试了很多,但没有   来得好。