我无法让 .plist 文件填充 masterviewcontroller 中的 TableView 。我正在关注一本书,代码与书中所写的完全相同,但运行代码时我在线程 1 上收到 EXC_BAD_INSTRUCTION。
var detailViewController: DetailViewController? = nil
var plantNames: [[String: String]]!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let path = NSBundle.mainBundle().pathForResource("plantList", ofType: "plist")!
let plantInfo = NSDictionary(contentsOfFile: path)!
plantNames = plantInfo["plants"]! as! [[String: String]]
我在最后一行收到错误。据我所知,我的 .plist 文件匹配它需要的所有内容。如果也需要发布,请告诉我。
非常感谢任何帮助!
添加了 .plist XML
<?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>plants</key>
<array>
<dict>
<key>name</key>
<string>Lily</string>
<key>sunlight</key>
<integer>30</integer>
<key>water</key>
<integer>40</integer>
</dict>
<dict>
<key>water</key>
<integer>5</integer>
<key>sunlight</key>
<integer>80</integer>
<key>name</key>
<string>Cactus</string>
</dict>
<dict>
<key>sunlight</key>
<integer>100</integer>
<key>name</key>
<string>Bonsai Tree</string>
<key>water</key>
<integer>50</integer>
</dict>
</array>
最佳答案
字典中的值包含 String
和 Int
类型,因此您必须将 plantNames
声明为 [[String:AnyObject] ]
并且数据源数组应该始终是非可选的。
var plantNames: [[String: AnyObject]]()
...
plantNames = plantInfo["plants"] as! [[String: AnyObject]]
但是现在您必须将从字典中检索到的任何值转换为 String
或 Int
。
旁注:强制向下转换类型时,不需要 key 订阅后的感叹号。
或者将属性列表文件中的所有 Int
类型更改为 String
以避免类型转换。
关于ios - 无法将数据获取到 MasterViewController 中的 UITableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36590864/