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

标签 ios uitableview swift dictionary plist

我已经尝试了最长的时间,现在将 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>

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

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

将 (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!")
    }

这是控制台返回的内容

Optional("(\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;\n

如何让我的 View 在 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)
        }
    }
}

关于ios - 将字典数组从 Plist 显示到 Tableview,Swift (Array<Dictionary<String, AnyObject>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30540123/

相关文章:

iOS 保存用户配置

iphone - 快速 TableView 滚动和后退按钮点击

swift - 在 iOS Swift 中的 showAlert 中创建 radioButton

ios - UITableView 不会显示数据

ios - 在 UITableView 的顶部项目重新排序和插入的逻辑是什么

ios - Xcode Swift - 如何从拆分 Controller 转到特定的导航 View Controller

ios - 以编程方式实例化 UIBarButtonItem 抛出缺少参数异常

ios - ePub 文件的统一类型标识符是什么?

ios - 如何使 dataTaskWithRequest 在 swift(Xcode 9,swift 4)中按时间顺序排列?

swift - 如何从 firebase 标题文件夹 Xcode 文件 TableView