解析.plist文件时出现问题

时间:2008-12-01 04:56:42

标签: iphone plist

我有一个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内容时会打印文件数据,有时则不会。

即使我使用网址作为路径,我也面临同样的问题。

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

原因是什么?

提前致谢。

5 个答案:

答案 0 :(得分:4)

根据您最初生成.plist的方式,如果您尝试将其作为数组重新读取,则可能会遇到问题。读取plist最安全的方法是使用NSPropertyListSerialization类:Apple Doc.

答案 1 :(得分:1)

要使用路径

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

然后使用它

NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath]; 
NSLog (@"%@", phrase2); 

答案 2 :(得分:1)

NSBundle *bundle = [NSBundle mainBundle]; 

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

NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath];

NSLog (@"%@", phrase2); 

答案 3 :(得分:0)

您是否使用writeToFile:atomically生成文件:?你检查这是否返回真实?

答案 4 :(得分:0)

这是一个非常愚蠢的错误,
我将“myarray”属性声明为“保留和非原子”,并且在解析操作期间我再次保留它,

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

意味着我保留了它但从未发布过它。这就是为什么那个奇怪的问题。

干杯。