显示从Plist到Tableview的字典数组,Swift(Array <Dictionary <String,AnyObject >>)

use*_*361 0 dictionary plist uitableview ios swift

我一直在尝试最长的时间,从plist到TableView显示一个字典数组.这是.plist文件的片段.

<array>
<dict>
    <key>dexNumber</key>
    <integer>1</integer>
    <key>formOrder</key>
    <integer>1</integer>
    <key>iconFilename</key>
    <string>pokemon-icon-1.png</string>
    <key>name</key>
    <string>Bulbasaur</string>
    <key>yield</key>
    <dict>
        <key>attack</key>
        <integer>0</integer>
        <key>defense</key>
        <integer>0</integer>
        <key>hp</key>
        <integer>0</integer>
        <key>spAttack</key>
        <integer>1</integer>
        <key>spDefense</key>
        <integer>0</integer>
        <key>speed</key>
        <integer>0</integer>
    </dict>
</dict>
<dict>
    <key>dexNumber</key>
Run Code Online (Sandbox Code Playgroud)

代码永远不会到达(返回self.data.count),因为它总是返回Unexpected nil,同时在第三行展开可选项.

if let path = NSBundle.mainBundle().pathForResource("dex", ofType: "plist"){
        if let dict = NSDictionary(contentsOfFile: path){
                data = dict.objectForKey("name") as! [String]
            }
    }
Run Code Online (Sandbox Code Playgroud)

将(let dict = NSDictionary)更改为(let dict = NSArray)让我可以使用println在控制台上打印出数据,但它不会让我在tableview上显示任何数据.此外,该方法只允许我查看包含其所有键的1个数组,而不是查看一个键的所有字典对象.

尝试以NSDictionary的形式查看文件的任何实例始终返回nil.任何以NSArray形式返回的实例都会给出无法在tableview上显示的结果,但可以使用println在控制台上显示.此代码段是打印结果的代码示例.

let resultDictionary = NSArray(contentsOfFile: path)
    println("Loaded dex.plist file is --> \(resultDictionary?.description)")
    var myDict = NSArray(contentsOfFile: path)
    if let dict = myDict {
        //loading values
        Item0ID = dict.objectAtIndex(0)
        print(Item0ID)
    } else {
        println("WARNING: Couldn't create dictionary from dex.plist! Default values will be used!")
    }
Run Code Online (Sandbox Code Playgroud)

这是在控制台上返回的内容

可选("(\n {\n\dexNumber = 1; \n formOrder = 1; \n iconFilename = \"pokemon-icon-1.png \"; \n name = Bulbasaur; \n yield = {\n attack = 0; \n defense = 0; \n hp = 0; \n spAttack = 1; \n spDefense = 0; \n speed = 0; \n}; \n},\n {\n\dexNumber = 2;\ñ

如何让我的视图在tableview上显示列表作为文本标签,而不是什么都没有?

Das*_*ash 5

plist包含一个字典数组,而不是字典本身,因此您需要将其初始化为NSArray,然后迭代要打印的元素并使用它们来构建数据数组.试试这个:

var data = [String]()
if let path = NSBundle.mainBundle().pathForResource("dex", ofType: "plist"){
    if let arrayOfDictionaries = NSArray(contentsOfFile: path){
        for dict in arrayOfDictionaries {
            data.append(dict.objectForKey("name") as! String)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)