[第1章]数据:NSUserDefaults的使用
来源:互联网 发布:淘宝商城魅族 编辑:程序博客网 时间:2024/06/14 11:53
一、配置
得到默认的NSUserDefaults
var defaults = NSUserDefaults.standardUserDefaults()
二、存入默认的plist文件
1、存入
// 为了调用方便,封装成方法。func storeDatas() { var name = "Jacky" var age = 22 var gender = true // 存入变量name,对应的键(key)为字符串“name”,下同。 defaults.setObject(name, forKey: "name") defaults.setInteger(age, forKey: "age") defaults.setBool(gender, forKey: "gender")}
2、读取
func getDatas() { // 根据键(key),来获取相对应的值(value)。 var name = defaults.objectForKey("name") as? String var age = defaults.integerForKey("age") var gender = defaults.boolForKey("gender") // 打印观察结果。 println("Name: \(name), Age: \(age), Gender: \(gender).")}
3、清空
所用方法: defaults.removePersistentDomainForName(domainName: String)
PS:下面文中,“三、存入指定的plist文件”——“3、清空”,也是用上面的方法。
// 方法封装func resetUserDefaultsDatas() { // 得到app的Domain,即系统默认用于存入数据的文件名字(不含.plist后缀)。 var appDomain = NSBundle.mainBundle().bundleIdentifier // 清空文件里面的所有数据(文件不删除)。 defaults.removePersistentDomainForName(appDomain!)}
三、存入指定的plist文件
1、存入
方法原型: defaults.setPersistentDomain(domain: [NSObject : AnyObject], forName: String)
参数1:字典数组;
参数2:存入目标文件的名字,文件后缀为plist。
// 定义一个domain的identifier。var personDomain = "person"// 定义一个字典。var dic = ["name": "Tom", "age": 24, "gender": true]defaults.setPersistentDomain(dic, forName: personDomain)
2、读取
函数原型: defaults.persistentDomainForName(domainName: String) -> [NSObject : AnyObject]?
接收:存入的文件名,不含.plist后缀;
返回:字典数组。
// 用变量dicFromPlist接收返回的字典数组。var dicFromPlist: Dictionary<NSObject, AnyObject> = defaults.persistentDomainForName(personDomain)!// 遍历打印观察结果。for (key, value) in dicFromPlist { println("\(key): \(value)")}
3、清空
所用方法: defaults.removePersistentDomainForName(domainName: String)
// 清空文件里面的所有数据(文件不删除)。defaults.removePersistentDomainForName(appDomain!)
四、存入任意实现NSCoding协议的类(归档)
1、目标类需要实现的协议
协议原型:
protocol NSCoding { func encodeWithCoder(aCoder: NSCoder) init(coder aDecoder: NSCoder) // NS_DESIGNATED_INITIALIZER}
2、实现协议
class Person: NSObject, NSCoding{ // 自己定义的几个属性。 var name: String? var age: Int? var gender: Bool? // 为了方便的构造方法。 init(name: String, age:Int, gender: Bool) { self.name = name self.age = age self.gender = gender } // 必须加关键字required; // 实例化时,默认调用的构造方法,不必人为调用。(必须) required init(coder aDecoder: NSCoder) { super.init() self.name = aDecoder.decodeObjectForKey("name") as? String self.age = aDecoder.decodeIntegerForKey("age") self.gender = aDecoder.decodeBoolForKey("gender") } // 也是系统自动调用,不必人为调用。(必须) func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(name!, forKey: "name") aCoder.encodeInteger(age!, forKey: "age") aCoder.encodeBool(gender!, forKey: "gender") } // 不必重写;这里只是为了方便使用println(类引用)的时候,打印出数据。 override var description:String { get{ return "Name: \(name!), Age: \(age!), Gender: \(gender!)" } }}
3、存入
方法原型: NSKeyedArchiver.archivedDataWithRootObject(rootObject: AnyObject) -> NSData
// 封装func storeByNSData() { // 实例化实现了NSCoding的类。 var person1 = Person(name: "TomNSData", age: 23, gender: true) // 转为NSData()(实现NSCoding的用处)。 var person1Data = NSKeyedArchiver.archivedDataWithRootObject(person1) // 和一般的Object一样,使用下面的方法 defaults.setObject(person1Data, forKey: "person")}
4、读取
方法原型: NSKeyedUnarchiver.unarchiveObjectWithData(data: NSData) -> AnyObject?
func getNSData() { // 和一般的Object一样,使用下面的方法 var person1DataFromPlist = defPlist.objectForKey("person") as? NSData // 解码。 var person1FromPlist = NSKeyedUnarchiver.unarchiveObjectWithData(person1DataFromPlist!) as! Person // 打印观察结果。 println(p1FromPlist)}
5、总结
存入任意类,和存入一般类
区别(任意类):
1、需要实现NSCoding协议;
2、用归档API转为NSData。
相同:
存入,读取的API一样。
1 0
- [第1章]数据:NSUserDefaults的使用
- [第1章]数据:NSUserDefaults的使用(续)
- iOS数据持久化 NSUserDefaults的使用
- NSUserDefaults保存的数据
- NSUserDefaults保存的数据
- NSUserDefaults 数据的存取
- NSUserDefaults保存的数据
- [第1章]数据:CoreData的简单使用
- iphone--使用NSUserDefaults存储数据
- iphone--使用NSUserDefaults存储数据
- NSUserDefaults的使用 (收集)
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults standardUserDefaults的使用
- NSUserDefaults的使用
- NSUserDefaults的使用
- UDP单播和广播的分析与实例
- Android的按钮单击事件及监听器的实现方式
- Eclipse创建Maven项目无法获取pom文件指定的jar包
- CSS BFC学习笔记
- 触发器
- [第1章]数据:NSUserDefaults的使用
- 高速IC下方能否布线还是应该保留完整局部地平面
- ssh
- Android圆角Tag控件的另类实现
- HDU5289
- 安装OpenStack前CentOS7网络基本配置
- UBUNTU如何安装tar.gz版的flash
- Mysql 免安装版的安装【转】
- 检测一个字符串是否可以只通过一次两个elements的交换实现排序!