【问题标题】:Can't read from plist无法从 plist 中读取
【发布时间】:2011-09-01 19:31:28
【问题描述】:

我正在尝试做一些我已经知道该怎么做的事情 - 但它不起作用。寻找解决此问题的想法。我认为这与 Xcode 4.1 创建 plist 文件的方式有关。

我正在尝试从 plist 文件中读取字符串,并将它们转储到 NSArray 中。这是我的代码:

NSString *myFile = [[NSBundle mainBundle] 
                                 pathForResource:@"File1"ofType:@"plist"];

myArray = [[NSArray alloc]initWithContentsOfFile: myFile];

我在 Xcode 中创建了一个 plist 文件——一个顶层数组和一些字符串。 myArray 始终为空。我尝试在文本编辑器中打开 plist,因为我在 stackoverflow 的其他地方读到 Xcode 4 在顶层创建了一个带有 Dictionary 的 plist。我手动编辑以使其成为顶层的数组 - 没有成功。最后,我恢复到顶层的 dict 并尝试将其读入 NSDictionary - 也没有成功。

我看了一个又一个教程,并在 StackOverflow 上阅读了许多类似的问题,但我无法从 plist 文件中读取任何内容 - 它肯定在捆绑包中。我在 Xcode 中无数次地重新创建了 plist。感谢您的任何建议。

这是 plist 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>New item</key>
<array>
    <string>Ping</string>
    <string>Pang</string>
    <string>Pong</string>
</array>
</dict>
</plist>

【问题讨论】:

    标签: ios xcode4 nsarray nsbundle


    【解决方案1】:

    你.plist的根对象是dict,所以你需要把它作为NSDictionary加载到内存中。

    myDictionary = [[NSDictionary alloc] initWithContentsOfFile: myFile];
    

    【讨论】:

      【解决方案2】:

      如果你只想加载plist,你需要使用属性列表序列化首先将plist加载为NSData

      [[NSData alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"File1"]]
      

      然后使用

      将其序列化为字典(或数组,取决于您的根项目是什么)
      NSDictionary *aDict = [NSPropertyListSerialization propertyListWithData: options: format: error:]
      

      当您在 Xcode 中查看 plist 时,顶层元素是要制作 aDict 的类型。

      查看这里了解更多信息:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html

      如果您希望将整个 plist 加载为字符串,您可能需要使用 NSString 方法执行某些操作,例如 [NSString stringFromData]

      【讨论】:

      • 这太过分了,你可以用 NSDictionay 初始化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2011-09-06
      相关资源
      最近更新 更多