Swift之沙盒与数据存储
2016-07-27 14:55
477 查看
Swift之沙盒与数据存储
应用沙盒结构分析1、应用程序包:包含了所有的资源文件和可执行文件 2、Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录 3、tmp:保存应用运行时所需要的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行,系统也可能会清除该目录下的文件,iTunes不会同步备份该目录 4、Library/Cache:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不备份该目录。一般存放体积大、不需要备份的非重要数据 5、Library/Preference:保存应用的所有偏好设置,IOS的Settings应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
IOS中的数据存储
/** NSSearchPathDirectory.DocumentDirectory 查找Documents文件夹 NSSearchPathDomainMask.UserDomainMask 在用户的应用程序下查找 true 展开路径 false 当前应用的根路径 == “~” */ let docPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString // 上面代码代替下面代码,防止Documen文件夹不存在***************************************************************** // 获得沙盒的根路径 let home = NSHomeDirectory() as NSString; // 获得Documents路径,使用NSString对象的stringByAppendingPathComponent()方法拼接路径 let docPath = home.stringByAppendingPathComponent("Documents") as NSString;
1、存储为plist属性列表
func saveWithFile() { // 1、获得沙盒的根路径 let home = NSHomeDirectory() as NSString; // 2、获得Documents路径,使用NSString对象的stringByAppendingPathComponent()方法拼接路径 let docPath = home.stringByAppendingPathComponent("Documents") as NSString; // 3、获取文本文件路径 let filePath = docPath.stringByAppendingPathComponent("data.plist"); let dataSource = NSMutableArray(); dataSource.addObject("衣带渐宽终不悔"); dataSource.addObject("为伊消得人憔悴"); dataSource.addObject("故国不堪回首明月中"); dataSource.addObject("人生若只如初见"); dataSource.addObject("暮然回首,那人却在灯火阑珊处"); // 4、将数据写入文件中 dataSource.writeToFile(filePath, atomically: true); } func readWithFile() { /// 1、获得沙盒的根路径 let home = NSHomeDirectory() as NSString; /// 2、获得Documents路径,使用NSString对象的stringByAppendingPathComponent()方法拼接路径 let docPath = home.stringByAppendingPathComponent("Documents") as NSString; /// 3、获取文本文件路径 let filePath = docPath.stringByAppendingPathComponent("data.plist"); let dataSource = NSArray(contentsOfFile: filePath); print(dataSource); }
2、使用NSUserDefaults存储数据
func saveWithNSUserDefaults() { // 1、利用NSUserDefaults存储数据 let defaults = NSUserDefaults.standardUserDefaults(); // 2、存储数据 defaults.setObject("衣带渐宽终不悔", forKey: "name"); // 3、同步数据 defaults.synchronize(); } func readWithNSUserDefaults(){ let defaults = NSUserDefaults.standardUserDefaults(); let name = defaults.stringForKey("name") let switch = defaults.boolForKey("bool") print(name) print(switch) }
3、归档存储:对象需要实现NSCoding协议,归档对应encode,反归档对应decode
/** 归档数据 需要实现NSCoding协议 */ func saveWithNSKeyedArchiver() { let docPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString let filePath = docPath.stringByAppendingPathComponent("contact.data"); let contact = Contact(name: "123333", phone: "123456") /** * 数据归档处理 */ NSKeyedArchiver.archiveRootObject(contact, toFile: filePath); } // 如果上面直接运行会报错,因为你需要在要归档的对象中遵循NSCoding协议,并实现归档方法和解析方法 如: class Contact: NSObject, NSCoding { var name: String? var phone: String? required init(name: String, phone: String){ self.name = name self.phone = phone } // 在对象归档的时候调用(哪些属性需要归档,怎么归档) func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(name, forKey: "name") } // 解析NIB/XIB的时候会调用 required init?(coder aDecoder: NSCoder) { super.init() name = aDecoder.decodeObjectForKey("name") as? String } } /** 反归档数据 */ func readWithNSKeyedUnarchiver() { let docPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString let filePath = docPath.stringByAppendingPathComponent("contact.data"); let contact = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as! Contact; print(contact.name!) }
相关文章推荐
- 在 Linux 上使用 tarball
- swift数据持久化--归档
- NSUserDefaults
- iOS中常用的四种数据持久化方法简介
- 我的本地化关于NSDefaults
- 福建省漳州市医院信息系统备份归档容灾系统采购项目
- 归档,SharePoint的好伙伴
- 问答:归档产品如何保障数据安全(上)
- 2012 ISTE国际教育行业技术大会
- 保险IT应用高峰论坛
- 参加微软全球合作伙伴大会
- MessageSolution参加第五届中国保险IT应用高峰论坛(保网)
- NSUserDefaults删除整个plist文件
- SharePoint 2010 文档管理(三)过期归档工具
- ORACLE 9I&10G置归档方法
- NSCoder,NSCoding,NSCopying之间的区别
- OC单个对象归档和解档关键类和方法名
- iOS 数据持久化之覆盖式存储(Plist ,Preference,归档)
- Linux下用Archivemount把tar归档文件映射为虚拟磁盘
- 复杂对象、自定义对象写入沙盒