plist array null 尽管 plist 确实包含一个字符串

Posted

技术标签:

【中文标题】plist array null 尽管 plist 确实包含一个字符串【英文标题】:plist array null although the plist does contain a string 【发布时间】:2012-06-28 22:04:29 【问题描述】:

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

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

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

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);

结果如何为空?

【问题讨论】:

也许你可以在模拟器中尝试一下,看看在plist编辑器中打开文件目录下的文件是什么样子的? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

您也可以尝试使用:

 [NSDictionary dictionaryWithContentsOfFile:path];

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于plist array null 尽管 plist 确实包含一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

尽管 PList 设置正确,但状态栏仍出现在 iOS 7 中

NSMutableArray 从 plist 返回 Null

Swift 中的 Array 扩展以使用 NSPropertyListReadOptions 从 plist 中读取数组

访问 plist 值返回 null

通过将 webView 存储在 Array/plist 中的选项卡式浏览?

如何将嵌套的 Array/JSON 字符串存储在 .plist 文件中?