gpt4 book ai didi

ios - 在 swift 2.1 中写入/读取 Plist

转载 作者:行者123 更新时间:2023-11-28 21:28:31 27 4
gpt4 key购买 nike

尝试将 addObject 保存到 plist 中的数组,但不知道该怎么做...

Plist的结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Location</key>
<array>
<string>test</string>
<string>test2</string>
</array>
<key>UserID</key>
<array>
<string>use1</string>
<string>user2</string>
</array>
</dict>
</plist>

这是我用的:

从 Documents 目录读取 plist 工作正常....在我看来DidLoad

 guard
let fileURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.URLByAppendingPathComponent("MyPlist.plist")
else { fatalError("Unable to get file") }

let dict = NSDictionary(contentsOfURL: fileURL)
locationArray = dict?.objectForKey("Location") as! NSMutableArray
userIDArray = dict?.objectForKey("UserID") as! NSMutableArray

在我的保存函数中:

 guard
let fileURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.URLByAppendingPathComponent("MyPlist.plist")
else { fatalError("Unable to get file") }

let dict = NSMutableDictionary(contentsOfURL: fileURL)

dict?.setObject(userDefaultLocationTextField.text!, forKey: "Location")
dict?.writeToURL(fileURL, atomically: true)

但是我的plist里好像什么都没写...

谢谢。

最佳答案

我建议使用 NSPropertyListSerialization 类,而不是简单的 NSDictionary(contentsOfURL: fileURL)

例如,由于 Swift 的值类型语义,您需要在更改其中一个数组后更新根字典

guard
let fileURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.URLByAppendingPathComponent("MyPlist.plist"),
fileData = NSData(contentsOfURL: fileURL)
else { fatalError("Unable to get file") }

do {
var dict = try NSPropertyListSerialization.propertyListWithData(fileData, options: .MutableContainersAndLeaves, format: nil) as! [String:AnyObject]

var locationArray = dict["Location"] as! [String]
locationArray.append(userDefaultLocationTextField.text!)
dict["Location"] = locationArray // this line is crucial to update the enclosing dictionary

let outputData = try NSPropertyListSerialization.dataWithPropertyList(dict, format: NSPropertyListFormat.XMLFormat_v1_0, options: 0)
try outputData.writeToURL(fileURL, options: .AtomicWrite)
} catch let error as NSError {
print(error)
}

关于ios - 在 swift 2.1 中写入/读取 Plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com