对于应用来说,每个用户都有自己的独特偏好设置,而好的应用会让用户根据喜好选择合适的使用方式,把这些偏好记录在应用包的plist
文件中,通过NSUserDefaults
类来访问,这是NSUserDefaults
的常用姿势。如果有一些设置你希望用户即使升级后还可以继续使用,比如玩游戏时得过的最高分、喜好和通知设置、主题颜色甚至一个用户头像,那么你可以使用NSUserDefaults
来存储这些信息,如果有更多需求,可以了解数据持久化
相关的知识。
具体来说NSUserDefaults
是iOS系统提供的一个单例类(iOS提供了若干个单例类),通过类方法standardUserDefaults
可以获取NSUserDefaults
单例。
NSUserDefaults
单例以key-value
的形式存储了一系列偏好设置,key
是名称,value
是相应的数据。存/取数据时可以使用方法objectForKey:
和setObject:forKey:
来把对象存储到相应的plist
文件中,或者读取,既然是plist
文件,那么对象的类型则必须是plist
文件可以存储的类型,正如官方文档中提到的——
NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
而如果需要存储plist
文件不支持的类型,比如图片,可以先将其归档为NSData
类型,再存入plist
文件,需要注意的是,即使对象是NSArray
或NSDictionary
,他们存储的类型也应该是以上范围包括的。
demo网址:https://github.com/potato512/SYSwiftLearning。
截取部分代码示例:
- // 保存,或修改
- func saveInfo(name:String)
- {
- if (0 <= name.characters.count)
- {
- let userDefault = NSUserDefaults.standardUserDefaults()
- userDefault.setObject(name, forKey: "name")
- userDefault.synchronize()
- let alert = UIAlertView(title: "温馨提示", message: "保存成功", delegate: nil, cancelButtonTitle: "知道了")
- alert.show()
- }
- }
- // 读取
- func readInfo() -> String
- {
- let userDefault = NSUserDefaults.standardUserDefaults()
- let name = userDefault.objectForKey("name") as? String
- let alert = UIAlertView(title: "温馨提示", message: "读取成功:\(name)", delegate: nil, cancelButtonTitle: "知道了")
- alert.show()
- if (name != nil)
- {
- return name!
- }
- return ""
- }
- // 删除
- func deleteInfo()
- {
- let useDefault = NSUserDefaults.standardUserDefaults()
- useDefault.removeObjectForKey("name")
- let alert = UIAlertView(title: "温馨提示", message: "删除成功", delegate: nil, cancelButtonTitle: "知道了")
- alert.show()
- }
可把关键的地方封装起来,方便以后使用。