1

我有一个 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];

原因是什么?

提前致谢。

4

5 回答 5

4

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

于 2008-12-01T11:53:24.090 回答
1

获取路径使用

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

然后使用它

NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath]; 
NSLog (@"%@", phrase2); 
于 2010-01-27T01:00:55.897 回答
1
NSBundle *bundle = [NSBundle mainBundle]; 

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

NSArray *phrase2 = [NSArray arrayWithContentsOfFile: plistPath];

NSLog (@"%@", phrase2); 
于 2010-01-27T01:09:47.563 回答
0

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

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

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

干杯。

于 2008-12-01T23:21:45.450 回答
0

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

于 2008-12-01T05:09:07.370 回答