Проблема в разборе файла .plist - PullRequest
1 голос
/ 01 декабря 2008

У меня есть один plist-файл, и я хочу проанализировать его и скопировать его содержимое в NSArray, и код, который я использую для этого, есть.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

NSString *documentsPath = [paths objectAtIndex:0];

NSString *fooPath = [documentsPath stringByAppendingPathComponent:@"myfirstplist.plist"];
NSLog(fooPath);
self.myArray = [[NSArray arrayWithContentsOfFile:fooPath] retain];
NSLog(@"%@",myArray);

Теперь проблема очень странная, иногда, когда я печатаю контент myArray, он печатает данные файла, а иногда нет.

Я сталкиваюсь с той же проблемой, даже когда использую URL в качестве пути.

self.myArray = [[NSArray arrayWithContentsOfURL:URlPath] retain];

в чем причина?

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 01 декабря 2008

В зависимости от того, как вы изначально сгенерировали .plist, вы можете столкнуться с проблемами, если попытаетесь прочитать его обратно в виде массива. Самый безопасный способ чтения списка - использование класса NSPropertyListSerialization: Apple Doc.

1 голос
/ 27 января 2010
NSBundle *bundle = [NSBundle mainBundle]; 

NSString *plistPath = [bundle pathForResource:  @"file-name" ofType:@"plist"]; 

NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath];

NSLog (@"%@", phrase2); 
1 голос
/ 27 января 2010

Чтобы получить путь, используйте

NSString *plistPath = [bundle pathForResource:  @"file-name" ofType:@"plist"];

А затем используйте его

NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath]; 
NSLog (@"%@", phrase2); 
0 голосов
/ 02 декабря 2008

Это была очень глупая ошибка,
Я объявил свойства "myarray" как "retain and nonatomic", и во время операции синтаксического анализа я снова сохраняю его,

self.myArray = [[NSArray arrayWithContentsOfURL:URlPath] retain];

означает, что я сохранил его, но так и не выпустил. Вот почему возникла эта странная проблема.

Приветствие.

0 голосов
/ 01 декабря 2008

Вы генерируете файл с writeToFile: атомарно :? Вы проверяете, что это возвращает true?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...