对于应用来说,每个用户都有自己的独特偏好设置,而好的应用会让用户根据喜好选择合适的使用方式,把这些偏好记录在应用包的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文件,需要注意的是,即使对象是NSArrayNSDictionary,他们存储的类型也应该是以上范围包括的。

 

demo网址:https://github.com/potato512/SYSwiftLearning

截取部分代码示例:

  1. // 保存,或修改  
  2. func saveInfo(name:String)  
  3. {  
  4.         if (0 <= name.characters.count)  
  5.         {  
  6.             let userDefault = NSUserDefaults.standardUserDefaults()  
  7.             userDefault.setObject(name, forKey: "name")  
  8.             userDefault.synchronize()  
  9.               
  10.             let alert = UIAlertView(title: "温馨提示", message: "保存成功", delegate: nil, cancelButtonTitle: "知道了")  
  11.             alert.show()  
  12.         }  
  1. // 读取  
  2. func readInfo() -> String  
  3. {  
  4.         let userDefault = NSUserDefaults.standardUserDefaults()  
  5.         let name = userDefault.objectForKey("name") as? String  
  6.       
  7.         let alert = UIAlertView(title: "温馨提示", message: "读取成功:\(name)", delegate: nil, cancelButtonTitle: "知道了")  
  8.         alert.show()  
  9.           
  10.         if (name != nil)  
  11.         {  
  12.             return name!  
  13.         }  
  14.           
  15.         return ""  
  16. }  
  1. // 删除  
  2. func deleteInfo()  
  3. {  
  4.         let useDefault = NSUserDefaults.standardUserDefaults()  
  5.         useDefault.removeObjectForKey("name")  
  6.        
  7.         let alert = UIAlertView(title: "温馨提示", message: "删除成功", delegate: nil, cancelButtonTitle: "知道了")  
  8.         alert.show()  

可把关键的地方封装起来,方便以后使用。