2015-01-19 5 views
1

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

ответ

2

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

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

Шаг 1: Создание Ивар называется _outputFileHandle;

NSFileHandle *_outputFileHandle; 

Шаг2: Вызов prepareDataHandle раз:

Step3:. Вызов 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]; 
    } 
}