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

Ios 显示从Plist到Tableview的字典数组,Swift(数组<;Dictionary<;String,AnyObject>;),ios,uitableview,swift,dictionary,plist,Ios,Uitableview,Swift,Dictionary,Plist,我一直在尝试将一组词典从plist显示到TableView中。这是.plist文件的一个片段 <array> <dict> <key>dexNumber</key> <integer>1</integer> <key>formOrder</key> <integer>1</integer> <key>iconFilename&

我一直在尝试将一组词典从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>
将(let dict=NSDictionary)更改为(let dict=NSArray)允许我使用println在控制台上打印数据,但不允许我在tableview上显示任何数据。此外,该方法只允许我查看一个数组及其所有键,而不是查看一个键的所有字典对象

任何试图以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!")
    }
这是控制台上返回的内容

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


如何让我的视图在tableview上以文本标签等形式显示列表,而不是什么都不显示?

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

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

Name应该返回String而不是[String]@LeonardoSavioDabus从[String]更改为String会在返回行上出现错误“String没有名为count的成员”和“找不到下标的重载”“在cell.textlabel行上。我在尝试显示此内容时遇到两个错误。您应该使用Swift native dictionary和arrayYour plist是一个字典数组,而不是dictionaryName应返回String not[String]@LeonardoSavioDabus从[String]更改为String会产生错误”“String没有名为count的成员”在返回行和“找不到下标的重载”在cell.textlabel行上。我在尝试显示此内容时遇到两个错误。您应该使用Swift native dictionary和arrayYour plist是一个字典数组,而不是dictionaryA++答案。我尝试过类似的内容,但这100%得到了要显示的名称。谢谢!!a++答案。我尝试过类似的内容,但这100%得到了t他要展示他的名字。谢谢!!