无法将Dict数组写入Plist文件

时间:2018-03-16 14:16:56

标签: ios swift plist nsdocumentdirectory

我无法将dicts数组写入plist文件。我可以把Dictionary写成plist文件。

我的代码如下;它总是不成功

    if var plistArray = NSMutableArray(contentsOfFile: path)
    {

        plistArray.add(dict)

        let success = plistArray.write(toFile: path, atomically: true)

        if success
        {
            print("success")
        }
        else
        {
            print("not success")
        }

    }

可能出现什么问题?

BR,

Erdem的

2 个答案:

答案 0 :(得分:1)

首先根本不在Swift中使用NSMutableArray ,使用原生的Swift Array

其次不要使用Foundation方法在Swift中读写Property List,使用PropertyListSerialization

最后,Apple强烈建议您使用URL相关API而不是String路径。

假设数组包含

[["name" : "foo", "id" : 1], ["name" : "bar", "id" : 2]]

使用此代码附加新项目

let url = URL(fileURLWithPath: path)

do {
    let data = try Data(contentsOf: url)
    var array = try PropertyListSerialization.propertyList(from: data, format: nil) as! [[String:Any]]
    array.append(["name" : "baz", "id" : 3])
    let writeData = try PropertyListSerialization.data(fromPropertyList: array, format: .xml, options:0)
    try writeData.write(to: url)
} catch {
    print(error)
}

考虑使用Codable协议将属性列表兼容的类和结构保存到磁盘。

答案 1 :(得分:0)

我认为您缺少序列化部分,您需要先将plist文件转换为data,然后再写入文件。

 let pathForThePlistFile = "your plist path"
    // Extract the content of the file as NSData
    let data =  FileManager.default.contents(atPath: pathForThePlistFile)!
    // Convert the NSData to mutable array
    do{
        let array = try PropertyListSerialization.propertyList(from: data, options: PropertyListSerialization.MutabilityOptions.mutableContainersAndLeaves, format: nil) as! NSMutableArray
        array.add("Some Data")
        // Save to plist
        array.write(toFile: pathForThePlistFile, atomically: true)
    }catch{
        print("An error occurred while writing to plist")
    }