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 中读取数组