Ios 显示从Plist到Tableview的字典数组,Swift(数组<;Dictionary<;String,AnyObject>;)
我一直在尝试将一组词典从plist显示到TableView中。这是.plist文件的一个片段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&
<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他要展示他的名字。谢谢!!