无法将数据获取到 MasterViewController 中的 UITableView

Cannot get data into UITableView in MasterViewController

我无法让我的 .plist 文件填充我在 masterviewcontroller 中的 table 视图。我正在看一本书,代码与书中所写完全相同,但是当 运行 代码时,我在线程 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>

字典中的值包含 StringInt 类型,因此您必须将 plantNames 声明为 [[String:AnyObject]] 并且数据源数组应该始终为非-可选。

var plantNames: [[String: AnyObject]]()

...

plantNames = plantInfo["plants"] as! [[String: AnyObject]]

但现在您必须将从字典中检索到的任何值转换为 StringInt

旁注:强制向下转换类型时,不需要密钥订阅后的感叹号。

或者将 属性 列表文件中的所有 Int 类型更改为 String 以避免类型转换。