无法在Swift中获取plist URL

时间:2016-01-31 19:24:13

标签: swift plist

我真的很困惑这个。网上有几十个问题要求"如何从Swift中的plist文件中获取信息?"到处都是相同的答案:

let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist")

但是,这行产生的总是为我生成nil。我已将Config替换为默认plist文件中的其他组件,但也获得了nil

我正在尝试访问我的自定义ProductIdentifiers数组,如下所示:

let url = NSBundle.mainBundle().URLForResource("ProductIdentifiers", withExtension: "plist")!
var productArray = NSArray(contentsOfURL: url) as! [[String:AnyObject!]]

我在productArray上发生了fatal error: unexpectedly found nil while unwrapping an Optional value的崩溃。我还尝试使用其他默认plist值代替ProductIdentifiers

有没有人知道为什么这对我不起作用,即使有很多人使用此帖成功?

2 个答案:

答案 0 :(得分:3)

我以前从未听说过OP的方法。相反,您应该打开Info.plist文件本身,然后从中提取值,如下所示:

Swift 3.0 +

func getInfoDictionary() -> [String: AnyObject]? {
    guard let infoDictPath = Bundle.main.path(forResource: "Info", ofType: "plist") else { return nil }
    return NSDictionary(contentsOfFile: infoDictPath) as? [String : AnyObject]
}

let productIdentifiers = getInfoDictionary()?["ProductIdentifiers"]

Swift 2.0

func getInfoDictionary() -> NSDictionary? {
    guard let infoDictPath = NSBundle.mainBundle().pathForResource("Info", ofType: "plist") else { return nil }
    return NSDictionary(contentsOfFile: infoDictPath)
}

let productIdentifiers = getInfoDictionary()?["ProductIdentifiers"]

答案 1 :(得分:1)

Resource代表plist的文件名,而不是其内容。

plist的根对象可能是字典。

MyPlist替换为真实文件名。 此代码打印plist的内容

if let url = NSBundle.mainBundle().URLForResource("MyPlist", withExtension: "plist"), 
       root = NSDictionary(contentsOfURL: url) as? [String:AnyObject] 
{
     print(root)
} else {
    print("Either the file does not exist or the root object is an array")
}