2016-09-21 6 views
0

Простите смешение старых классов и Swift 3, но почему это не работает?Почему NSMutableDictionary не записывается в файл

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
let documents = paths[0] as String 
let path = documents.appending("/SomeData.plist") 
let url : URL = URL.init(string: path)! 

let sampleDict : NSMutableDictionary = ["name" : "somebody", "age" : "30 ", "food" : "taco"] 

let manager = FileManager.default 
if (manager.fileExists(atPath: url.absoluteString)) { 

     sampleDict.write(to: url, atomically: true) 

} else { 

     manager.createFile(atPath: url.absoluteString, contents: nil, attributes: nil) 
     sampleDict.write(to: url, atomically: true) 
} 

Файл создан по пути, но списание содержимого словаря происходит с ошибкой каждый раз.

ответ

2

URL-адрес в файловой системе должен быть создан с

let url = URL(fileURLWithPath: path) 

URL, всегда не по желанию.

И файловая система URL должен быть проверен с

if (manager.fileExists(atPath: url.path)) {... 

URL(string: (нет инициализации) и .absoluteString связаны с URL, с другой схемой, как file, например http или ftp

Дон» t аннотировать типы, если компилятор действительно не нуждается в этом, например

let sampleDict = ["name" : "somebody", "age" : "30 ", "food" : "taco"] 

Если вы хотите изменяемый словарь использовать var вместо let

PS: Современный синтаксис

let manager = FileManager.default 
let documentURL = try! manager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
let url = documentURL.appendingPathComponent("SomeData.plist") 
let sampleDict = ["name" : "somebody", "age" : "30 ", "food" : "taco"] 
do { 
    let data = try PropertyListSerialization.data(fromPropertyList: sampleDict, format: .xml, options: 0) 
    try data.write(to: url) 
} catch let error as NSError { 
    print(error) 
} 

Явное создания нового файла не требуется.

+0

спасибо. Проблема здесь была «fileURLWithPath». Понятия сериализации полезны, фрагмент, который я разделял, не оптимизирован, но при использовании записи NSMutableDict, исходящей из унаследованного кода, файл, который я разделял, был автономным с тем же типом. – isaac

Смежные вопросы