У меня есть один файл 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];
в чем будет причина?
Заранее спасибо.





Вы создаете файл с writeToFile: атомарно:? вы проверяете, что это верное значение?
В зависимости от того, как вы изначально сгенерировали .plist, вы можете столкнуться с проблемами, если попытаетесь прочитать его в виде массива. Самый безопасный способ читать список - использовать класс NSPropertyListSerialization: Apple Doc.
Это была очень глупая ошибка,
Я объявил свойства myarray как «сохраняемые и неатомарные», и во время синтаксического анализа я снова их сохраняю,
self.myArray = [[NSArray arrayWithContentsOfURL:URlPath] retain];
означает, что я сохранил его, но так и не выпустил. Вот почему возникла та странная проблема.
Ваше здоровье.
Чтобы получить путь, используйте
NSString *plistPath = [bundle pathForResource: @"file-name" ofType:@"plist"];
А потом используйте это
NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath];
NSLog (@"%@", phrase2);
NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource: @"file-name" ofType:@"plist"];
NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath];
NSLog (@"%@", phrase2);
Что происходит, когда содержимое массива не печатается? Произошла ошибка или в журнале просто отображается (null)?