虽然plist确实包含一个字符串,但plist数组为null

时间:2012-06-28 22:04:30

标签: ios nsmutablearray initialization nsarray plist

我有一个plist文件,从主包中复制到docs目录中。如果该文件已存在于文档中,则它不会复制它应该如何工作。

我遇到的问题是我在appDelegate applicationDidFinishLaunching或rootViewControllers viewDidLoad或viewDidAppear方法中初始化plist数组。

现在mainbundle中的plist被复制到docs dir有一个项目是一个字符串

plist源确实包含一个名为GBP的字符串,该字符串包含在数组节点中,这也是正确的。

我像这样初始化plist NSMutableArray

NSString *rootPath2 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath2 = [rootPath2 stringByAppendingPathComponent:@"currency.plist"];
theCurrency = [[NSMutableArray alloc] initWithContentsOfFile:plistPath2];

在viewDidLoad或viewWillAppear中,我用以下方法检查数组:

NSLog(@"Array contains %@", theCurrency);

结果如何为空?

3 个答案:

答案 0 :(得分:0)

假设它找到了文件,那么plist应该是一本字典。 plist中的数组应该有一个名称来识别它,所以尝试类似:

NSDictionary *dict = [[NSDictionary alloc]initWithContentsOfFile:plistPath2];
NSArray *currencyArray = [dict objectForKey:@"CurrencyArrayKey"];

其中“CurrencyArrayKey”是您的plist中数组的键。

答案 1 :(得分:0)

通过将plist内容打开为文本文件来检查它。

通过可视化编辑器创建的Plist是由包含其余元素的dict创建的(我不清楚你是否包含字符串或带字符串的数组)。

如果你看到一个字典,那么你的plist会正确地反序列化为字典,而不是数组。

您也可以尝试使用:

 [NSDictionary dictionaryWithContentsOfFile:path];

答案 2 :(得分:0)

好的家伙我发现它是我初始化阵列的地方。在viewdidload中,我在0.1秒延迟后提供了执行选择器,并且选择器指向一个方法,该方法包含plist的初始化以及我在记录数组内容时检查的条件。