我有一个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];
原因是什么?
提前致谢。
答案 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];
意味着我保留了它但从未发布过它。这就是为什么那个奇怪的问题。
干杯。