#objective-c #writetofile
#objective-c #запись файла
Вопрос:
Я использую довольно простой метод сохранения имен файлов в текстовом файле. По какой-то причине, когда я инициирую запись файла, я получаю сбой:
pathString = [NSString stringWithFormat:@"New FileName - %@.png", identifier];
NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];
NSString *newContents = [NSString stringWithFormat:@"%@:::%@",currentContents, pathString];
NSData *newData = [newContents dataUsingEncoding:NSUTF8StringEncoding];
[newData writeToFile:saveFilePath options:NSDataWritingAtomic error:nil];
Он считывает файл, помещает его содержимое в переменную с именем currentContents, затем добавляет новую строку в файл и перезаписывает ее. Что здесь происходит не так.
Без строки writeToFile это работает, с ней я получаю сбой.
Источник пути к файлу сохранения
NSString *saveDocument = [NSString stringWithFormat:@"SavedFile.txt"];
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
saveFilePath = [docsDirectory stringByAppendingPathComponent:saveDocument];
NSLog пути сохранения файла показывает правильный путь
Комментарии:
1. Вы должны использовать,
-[NSData writeToURL:options:error:]
как рекомендует Apple, использованиеNSURL
объектов поверхNSString
объектов при работе с путями к файлам. Кстати, у вас синтаксическая ошибка в первой строке.2. Ах, вы имеете в виду запятую, это было сделано во время моего процесса анонимизации, в моем исходном коде там есть запятая, лол. Хорошо, я попробую этот NSURL вместо NSString
3. ошибка: nil должно быть error: NULL
4. Ошибка @onnoweb сохраняется и по вашему предложению.
5. Откуда берется путь к файлу сохранения?
Ответ №1:
Я думаю, что ваша проблема на самом деле может заключаться в отсутствующем нулевом символе ( ''
) в конце вашего объекта NSData. Итак, в итоге вы получаете перепутанные данные. Возможно, вам все равно захочется использовать -writeToFile:atomically:encoding:error:
в вашей новой строке сразу.
Ответ №2:
Оказывается, причина, по которой файл не записывался, заключалась в нераспределенной переменной:
NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];
должно было быть:
NSString *currentContents = [[NSString alloc] initWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];