我需要坚持5个布尔值,以跟踪用户在应用中的进度。我认为为此目的使用核心日期是过度的,因此我决定使用属性列表(PLIST)。
在我的应用中,有ToolTipData.plist
我存储5个布尔值。默认的布尔值是错误的。我想在某些场合将值更改为真。
这是我如何更新字典中的值并写信给PLIST:
static func updatePList() {
if let path = Bundle.main.path(forResource: "TooltipViewData", ofType: "plist") {
let dic = NSMutableDictionary(contentsOfFile: path)
dic?.setValue(NSNumber.init(booleanLiteral: true), forKey: "firstToolTipViewSeen")
if dic?.write(toFile: path, atomically: true) == true {
print("saved")
} else {
print("not saved")
}
print("reading updated plist: (NSMutableDictionary(contentsOfFile: path))")
}
}
结果,我得到saved
打印和
reading updated plist: Optional({
firstToolTipViewSeen = 1;
secondToolTipViewSeen = 0;
thirdToolTipViewSeen = 0;
})
然后,我单击应用程序中的PLIST文件,然后发现 firstToolTipViewSeen
的值仍然是NO
,即使我通过上述方法更新为YES
。PLIST文件不应该更新还是我做错了什么?
谢谢
应用程序包中的文件无法写入。
您应该在Library
目录中创建PLIST,然后从那里进行修改。
这是创建文件的方法:
var appDir = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let plistURL = documentDirectoryURL.URLByAppendingPathComponent("TooltipViewData.plist")
do {
let fileExists = try plistURL.checkResourceIsReachable()
if !fileExists {
// create the plist, or move the plist from the main app bundle to plistURL
}
} catch let error as NSError {
print(error)
}
然后,您可以像以前一样保存给PLIST,这次使用URL plistURL
。
只是一个建议:将用户的预订保存到NSUserDefaults