Как записать данные порциями на диск в 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];
}
}
Вы можете использовать NSOutputStream