Как записать данные порциями на диск в ios

Привет, в моем приложении я загружаю PDF-файл и этот общий размер я получаю кусками. Теперь, когда я получаю эти данные в виде фрагментов, я сохраняю их в объекте NSData, а остальные фрагменты добавляю в тот же объект. во время выполнения этого приложения происходит сбой с предупреждением о нехватке памяти. Есть ли способ записать данные на диск, затем добавить данные в записанный файл в песочнице. Иногда размер файла превышает 400 Мб. Пожалуйста, помогите мне.

2 ответа

NSFileHandle можно использовать для этого:

Что-то вроде этого:

Шаг 1: Создайте iVar с именем _outputFileHandle;

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];
    }
}
Другие вопросы по тегам