美文网首页
iOS--序列化数据并保存

iOS--序列化数据并保存

作者: Michael杨 | 来源:发表于2016-12-02 17:05 被阅读0次

开发中经常有这么一个场景: 从服务器读取一组数据,转换成model并存入数组中,有时候这组数据并不是需要每次从服务器读取,这个时候,我们可以对数据进行缓存操作。将这组数据存入文件中。

这里有几种缓存的方式,比如,直接将服务器请求的数据,一般是一组json字符串写入文件,也有将json数据解析model化并存入数组或者字典后写入文件。这篇文章记录的是后面一种保存数据的方式。这里我们以数组为例。

有一个数组lists,里面存了数量若干的checklist,每个checklistItem是一个model

model序列化

首先要对mode进行序列化处理,继承NSObject,并实现NSCoding协议,将属性进行encode处理

class Checklist: NSObject, NSCoding{
    var text = ""
    var checked = false
    
    func toggleChecked(){
        checked = !checked
    }
    
    func encode(with aCoder: NSCoder) {
        aCoder.encode(text, forKey: "Text")
        aCoder.encode(checked, forKey: "Checked")
    }
    
   required init?(coder aDecoder: NSCoder) {
        super.init()
    }
    
    override init() {
        super.init()
    }
    
}

将数据写入文件

  func saveChecklists() {
        let data = NSMutableData()
        let archiver = NSKeyedArchiver(forWritingWith: data)
        archiver.encode(lists, forKey: "Checklists")
        
        archiver.finishEncoding()
        
        data.write(to: filePath(), atomically: true)
    }

首先创建一个NSKeyedArchiver 对象,然后利用encode方法对需要进行保存的数组进行编码
,也就是plist化。最后将数据data写入到文件中。

进行这一步操作后,就可以在沙盒中找到我们要保存的数据,数据以plist的方式存储

从plist中读取已保存的数据

    func loadChecklists(){
        let path = filePath()
        if let data = try? Data(contentsOf: path){
            let unarchiver = NSKeyedUnarchiver(forReadingWith: data)
            lists = unarchiver.decodeObject(forKey: "Checklists") as! [Checklist]
            unarchiver.finishDecoding()
        }
    }

相关文章

  • iOS--序列化数据并保存

    开发中经常有这么一个场景: 从服务器读取一组数据,转换成model并存入数组中,有时候这组数据并不是需要每次从服务...

  • iOS开发之归档

    前言 归档:将对转序列化成二级制数据,并保存在文件中。 解归档:将归档后的数据反序列化成明码(能够看懂)对象,供我...

  • Java中序列化和打印流

    一、对象序列化和反序列化 1、概述 对象的序列化:对象中的数据,以流的形式,写入到文件中并保存的过程称为写出对象,...

  • 对于序列化的理解-[Android_YangKe]

    序列化:指数据持久化,永久性的将数据保存在磁盘的过程。反序列化:将数据从磁盘中读取出来并恢复为原对象的一个过程。在...

  • 实现序列化的两种方式Serializable和Parcelabl

    序列化的目的(1).永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中)(2).通过序列化操作将对象数据在...

  • Android中对象的序列化

    为什么需要对对象进行序列化 永久的保存对象数据(将对象数据保存到磁盘中) 通过序列化操作将对象数据在网络上进行传输...

  • 系列(5)Serializable 和 Parcelable 的

    1、 序列化的目的 (1)永久的保存对象,将对象数据保存在文件、磁盘或者数据库中 。 (2)通过序列化操作将对象数...

  • Serializable 和 Parcelable 的使用和区别

    1、 序列化的目的 (1)永久的保存对象,将对象数据保存在文件、磁盘或者数据库中 。 (2)通过序列化操作将对象数...

  • DRF使用篇(三):序列化

    一.序列化和反序列化 序列化将数据库数据序列化为前端所需要的格式,并返回 反序列化将前端发送的数据反序列化为模型类...

  • spark 优化文档(一)

    注册序列化,在网路传输和数据保存方面有作用

网友评论

      本文标题:iOS--序列化数据并保存

      本文链接:https://www.haomeiwen.com/subject/afrqmttx.html