我无法将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的
答案 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")
}