使用 contentsOfFile 方法的 NSDictionary 不在 Swift 中构建

Posted

技术标签:

【中文标题】使用 contentsOfFile 方法的 NSDictionary 不在 Swift 中构建【英文标题】:NSDictionary using contentsOfFile method doesn't build in Swift 【发布时间】:2015-04-14 04:41:36 【问题描述】:

我正在使用 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 文章(表面上)成功地使用了相同的代码。

有什么想法吗?

【问题讨论】:

尝试打印 NSDictionary 的键计数或尝试直接打印 NSDictionary 而不是计数。 【参考方案1】:

我已经测试了你的代码,它运行良好。

可能是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 必须位于此处

【讨论】:

感谢您的回复。我相信你的回答给了我一个线索。你的 plist 正在工作而我的没有促使我更仔细地检查 plist 的事实,我发现我的 plist 转换器(我下载的 soma 应用程序),而不是创建一个键值对字典,而是创建一个数组字典! 很好!如果我的回答对您有帮助,您可以将其标记为答案并按下投票按钮,我希望 :) 确实如此。我刚刚将您的答案标记为正确,并投了赞成票,谢谢。值得注意的是,plist 可能位于您指定的位置,或者位于与其他 plist 组合在一起的“文件夹”中。 要明确:我的问题不是上面的代码 sn-p,而是格式错误的 plist。一旦我的好友提供了一个更好的 csv 到 plist 转换器,一切都很好。再次感谢。

以上是关于使用 contentsOfFile 方法的 NSDictionary 不在 Swift 中构建的主要内容,如果未能解决你的问题,请参考以下文章

NSDictionary init(contentsOfFile:) 已被弃用,现在怎么办?

NSD 和 WifiP2pManager 有啥不同?

使用 UIImage(contentsOfFile: ) 时获取 EXC_BAD_ACCESS

如何将 UIImage(contentsOfFile:String) 与从 Internet 下载的图像数据一起使用?

Swift:无法使用String加载文件(contentsOfFile:encoding :)

尽管缓存目录中存在文件,但 UIImage(contentsOfFile:) 返回 nil [重复]