2016-01-31 2 views
2

Я действительно смущен этим. Есть десятки вопросов в Интернете, спрашивающих «Как мне получить информацию из моего файла plist в Swift?» и тот же ответ размещен везде:Не удается получить URL-адрес plist в Swift

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!]] 

я получаю аварии с указанием fatal error: unexpectedly found nil while unwrapping an Optional value на productArray. Я также пробовал это с другими значениями plist по умолчанию вместо ProductIdentifiers.

Кто-нибудь знает, почему это не работает для меня, хотя есть много сообщений вокруг людей, использующих это успешно?

ответ

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"] 
+0

Вот несколько я пробовал: http://stackoverflow.com/questions/24045570/swift-read-plist, http://stackoverflow.com/questions/26391883/КСН-8-быстры чтения-PLIST. Ваш путь отлично работал, прежде всего, попытайтесь! – jwade502

1

Resource представляет имя файла из plist, а не его содержимое.

Корневой объект plist - это, вероятно, словарь.

Замените MyPlist с реальным именем. Этот код выводит содержимое списка свойств

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") 
}