如何以块的形式将数据写入ios中的磁盘

时间:2015-01-19 13:22:11

标签: ios objective-c nsfilemanager nsfilehandle

您好,在我的应用程序中,我正在下载一个pdf文件,而且我正在整理大小。现在我以块的形式获取数据后,我将存储在NSData对象中,剩下的块我将附加到同一个对象。虽然这个应用程序正在崩溃与低内存警告。有没有办法将数据写入磁盘,然后将数据附加到沙箱中的写入文件。有时文件超过400 Mb。请帮帮我。

2 个答案:

答案 0 :(得分:2)

NSFileHandle可用于此:

这样的事情:

步骤1:创建名为_outputFileHandle;

的iVar
NSFileHandle *_outputFileHandle;

第2步:调用prepareDataHandle一次:

步骤3:每当数据垃圾进入时调用writingDataToFile

相应地修改您的工作流程,以便它可以判断文件下载何时完成。

-(void)prepareDataHandle
{
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *outputFilePath = [documentsDirectory stringByAppendingPathComponent:@"anoutputfile.xxx"];
     if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath] == NO)
    {
        NSLog(@"Create the new file at outputFilePath: %@", outputFilePath);
        BOOL suc = [[NSFileManager defaultManager] createFileAtPath:outputFilePath
                                              contents:nil
                                            attributes:nil];
        NSLog(@"Create file successful?: %u", suc);
    }
    _outputFileHandle = [NSFileHandle fileHandleForWritingAtPath:outputFilePath];
}

-(void)writingDataToFile:(NSData *)dataToWrite
{
    if (dataToWrite.length != 0)
    {
        [_outputFileHandle writeData:dataToWrite];
    }
    else   //you can use dataToWrite with length of 0 to indicate the end of downloading or come up with some unique sequence yourself
    {
        NSLog(@"Finished writing... close file");
        [_outputFileHandle closeFile];
    }
}

答案 1 :(得分:0)