Неспособность записать NSString в файл на iPad - PullRequest
0 голосов
/ 04 августа 2010

Я использую текстовый файл, чтобы сохранить изменения, сделанные пользователем в списке (причина, по которой я это делаю, заключается в том, чтобы я мог позже загрузить текстовый файл на ПК и оттуда вставить егов электронную таблицу Excel).У меня есть 3 структуры данных: NSMutableArray ключей и NSMutableDictionary, значениями ключей которого являются MSMutableArrays из NSStrings.

Я перебираю эти структуры данных и компилирую строку файла, которая выглядит примерно так:

(Key);(value)\t(value)\t(value):\n(Key);(value).. .so on.

ТАК, на фактический вопрос: когда я пытаюсь сохранить его, он терпит неудачу.Я на 99% уверен, что это из-за пути к файлу, который я использую, но я хотел сделать резервную копию, чтобы проверить это.Код выглядит следующим образом:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *filePath = [paths objectAtIndex:0];
NSString *fileString = [NSString stringWithString:[self toFileString]];
if(![fileString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:NULL]){
    NSLog(@"File save failed");
} else {
    // do stuff
}

(Код выше скопирован, так как реальный код находится на другом компьютере. Он компилируется, поэтому игнорируйте орфографические ошибки?)

Я пытался использовать NSError,но я увяз в документации и подумал, что я мог бы также спросить SO, пытаясь выяснить, как правильно использовать NSError (может быть, немного идиот, извините).

99% уверен, что это NSArray* строка пути, которая его отключает, но я не знаю, как еще получить каталог документов.

Редактировать: проблема решена, и один последний вопрос: если я сохраню его в каталоге документов приложения, где можноЯ иду после того, как закрываю приложение, чтобы посмотреть, правильно ли оно сохранено?Если это работает так, как я думаю, не связано ли это с установкой приложения на симуляторе?(т.е. нет возможности проверить это)

Ответы [ 2 ]

4 голосов
/ 04 августа 2010

NSLog () эта строка filePath. Я думаю, что вы пытаетесь записать в сам каталог, а не в файл.

Попробуйте вместо этого:

filePath = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"myfile.txt"];
1 голос
/ 04 августа 2010

Какое имя файла вы хотите сохранить? Метод

NSArray *paths = NSSearchPathForDirectoriesInDomains(...);
NSString *filePath = [paths objectAtIndex:0];
...
if(![fileString writeToFile:filePath ...

означает, что вы сохраняете строку в путь к файлу , имя которого совпадает с именем папки . Это, конечно, потерпит неудачу. Пожалуйста, дайте ему имя, например

NSString* fileName = [filePath stringByAppendingPathComponent:@"file.txt"];
if(![fileString writeToFile:fileName ...

и попробуйте снова.


Кстати, чтобы использовать NSError:

NSError* theError = nil;
if(![fileString writeToFile:fileName ... error:&theError]) {
//                                             ^^^^^^^^^
  NSLog(@"Failed with reason %@", theError);
  // theError is autoreleased.
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...