【问题标题】:plist array null although the plist does contain a stringplist array null 尽管 plist 确实包含一个字符串
【发布时间】: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编辑器中打开文件目录下的文件是什么样子的?

标签: ios nsmutablearray initialization nsarray 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 的初始化以及我在记录数组内容时检查的条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多