zoukankan      html  css  js  c++  java
  • iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种:

    1. 属性列表 (plist、NSUserDefaults)
    2. 归档 (NSKeyedArchiver)
    3. 数据库 (SQLite、Core Data、第三方类库等

    归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上;程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象。本文主要介绍swift实现iOS数据归档。

    归档Foundation框架对象

    复制代码
    func archiveData(){
            var path: AnyObject=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
            var filePath=path.stringByAppendingPathComponent("data.archive")
            //归档
            var array=["Bill Gates","Steve Jobs"]
            if(NSKeyedArchiver.archiveRootObject(array, toFile: filePath)){
                NSLog("Archive Success")
            }
        }
        func unarchiveData(){
            var path: AnyObject=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
            var filePath=path.stringByAppendingPathComponent("data.archive")
            //反归档
            var data=NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as NSArray
            NSLog("%@", data)
        }
    复制代码

    小结:

    1. 归档和解归档操作步骤简单
    2. 一次只能归档一个对象,如果是多个对象归档需要分开进行
    3. 归档的对象是Foundation框架中的对象
    4. 归档和解归档其中任意对象都需要归档和解归档整个文件
    5. 归档后的文件是加密的,所以归档文件的扩展名可以随意取
     
    归档自定义数据
     
    复制代码
            var path=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString
            var filePath=path.stringByAppendingPathComponent("data.archive")
            //归档
            var data=NSMutableData()
            var archiver=NSKeyedArchiver(forWritingWithMutableData: data)
            archiver.encodeObject(["Bill Gates","Steve Jobs"], forKey: "data");
            archiver.encodeInt(32, forKey: "age");
            archiver.encodeObject("test message", forKey: "tip");
            archiver.finishEncoding()
            data.writeToFile(filePath, atomically: true)
             //反归档
            var unarchiveData=NSData(contentsOfFile: filePath)
            var unarchiver=NSKeyedUnarchiver(forReadingWithData: unarchiveData!)
            var decodeData=unarchiver.decodeObjectForKey("data") as NSArray
            var decodeAge=unarchiver.decodeIntForKey("age")
            var decodeTip=unarchiver.decodeObjectForKey("tip") as NSString
            NSLog("data=%@,age=%i,tip=%@",decodeData,decodeAge,decodeTip)
    复制代码

    小结:

    1. 在带键的归档中,每个归档字段都有一个key值,解归档时key值要与归档时key值匹配
    2. 带键归档可以一次存储多个对象
    3. 归档的对象是Foundation框架中的对象
    4. 归档和解归档其中任意对象都需要归档和解归档整个文件
    5. 归档后的文件是加密的,所以归档文件的扩展名可以随意取
     http://www.cnblogs.com/mantgh/p/4346822.html
  • 相关阅读:
    RecyclerView用法
    POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】
    Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】
    ACM-ICPC 2017 Asia Xi'an J LOL 【暴力 && 排列组合】
    2016 ACM/ICPC亚洲区大连站 F
    2016 ACM/ICPC亚洲区大连站-重现赛 解题报告
    ACM-ICPC 2017 Asia HongKong 解题报告
    Codeforces Round #515 (Div. 3) B. Heaters【 贪心 区间合并细节 】
    POJ 1984 Navigation Nightmare 【经典带权并查集】
    树的直径的求法即相关证明【树形DP || DFS】
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4562920.html
Copyright © 2011-2022 走看看