Swift 中没有使用 contentsOfFile 方法的 NSDictionary
NSDictionary using contentsOfFile method doesn't build in Swift
我正在使用 contentsOfFile 方法构建一个字典,并将该方法指向一个 plist。我的代码如下:
func buildGraphicsDictionary() {
var theme: String = "defaultTheme"
var myDict: NSDictionary?
if let path = NSBundle.mainBundle().pathForResource(theme, ofType: "plist") {
println("path: \(path)")
myDict = NSDictionary(contentsOfFile: path)
println("dict count: \(myDict?.count)")
} else {
println("could not find plist file")
}
}
已找到 plist。我肯定知道这一点,因为我能够打印出路径,并且因为当我将 plist 字符串的名称更改为不存在的名称时,我收到错误消息。所以我相信问题不在于访问 plist。
但是,当我尝试使用 count 打印字典中元素的数量时,控制台报告 myDict 的值为 nil。所以这告诉我问题实际上出在我构建字典 (contentsOfFile) 的方法中。令人困惑的是,我已经看到其他 SO 文章(表面上)成功地使用了相同的代码。
知道这里会发生什么吗?
我已经测试了您的代码,它运行良好。
可能是 plist 的问题?
我用这个 plist 测试了你的代码:
<?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>test1</key>
<string>one</string>
<key>test2</key>
<string>two</string>
</dict>
</plist>
在我的控制台中我看到:
dict count: Optional(2)
plist 必须位于此处
我正在使用 contentsOfFile 方法构建一个字典,并将该方法指向一个 plist。我的代码如下:
func buildGraphicsDictionary() {
var theme: String = "defaultTheme"
var myDict: NSDictionary?
if let path = NSBundle.mainBundle().pathForResource(theme, ofType: "plist") {
println("path: \(path)")
myDict = NSDictionary(contentsOfFile: path)
println("dict count: \(myDict?.count)")
} else {
println("could not find plist file")
}
}
已找到 plist。我肯定知道这一点,因为我能够打印出路径,并且因为当我将 plist 字符串的名称更改为不存在的名称时,我收到错误消息。所以我相信问题不在于访问 plist。
但是,当我尝试使用 count 打印字典中元素的数量时,控制台报告 myDict 的值为 nil。所以这告诉我问题实际上出在我构建字典 (contentsOfFile) 的方法中。令人困惑的是,我已经看到其他 SO 文章(表面上)成功地使用了相同的代码。
知道这里会发生什么吗?
我已经测试了您的代码,它运行良好。
可能是 plist 的问题?
我用这个 plist 测试了你的代码:
<?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>test1</key>
<string>one</string>
<key>test2</key>
<string>two</string>
</dict>
</plist>
在我的控制台中我看到:
dict count: Optional(2)
plist 必须位于此处