美文网首页
Swift-归档解档存储自定义类型数据

Swift-归档解档存储自定义类型数据

作者: 下班不写程序 | 来源:发表于2020-04-03 15:39 被阅读0次
  1. 模型内部操作
  2. 外部存储、获取操作

1. 模型内部操作

1.1. 模型类必须继承NSObject 、NSCoding, 在swift5.0 之后还要继承NSSecureCoding 协议
1.2. 继承NSSecureCoding 需要实现supportsSecureCoding 方法, 并且必须要返回true(目前Xcode会点击fix 自动完成).
1.3. 必须实现encode、decode方法

import UIKit

class Model: NSObject, NSCoding, NSSecureCoding {
    static var supportsSecureCoding: Bool {
        return true
    }
    
    // 从object 解析回来
    required init?(coder: NSCoder) {
        super.init()
        name = coder.decodeObject(forKey: "name") as? String ?? ""
        age = coder.decodeObject(forKey: "age") as? Int ?? 0
    }

    // 编码成object
    func encode(with coder: NSCoder) {
        coder.encode(name, forKey: "name")
        coder.encode(age, forKey: "age")
    }
   
    // 注意: 要严格的与后台传输类型相匹配, 否则得到的结果将为nil
    var name: String?
    var age: Int?
}

2. 存储操作(NSKeyedArchiver.archivedData)

        // 路径
        let file = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        // 拼接路径 自动带斜杠的
        let filePath = (file as NSString).appendingPathComponent("UserAccount.archiver")
        print("用户信息路径:\(filePath)")
        // 保存
        do {
            let data = try NSKeyedArchiver.archivedData(withRootObject: "要存入的自定义类型的数据", requiringSecureCoding: true)
            do {
                _ = try data.write(to: URL(fileURLWithPath: filePath))
                print("写入成功")
            } catch {
                print("data写入本地失败: \(error)")
            }
        } catch  {
            print("模型转data失败: \(error)")
        }

2. 获取操作(NSKeyedUnarchiver.unarchiveTopLevelObjectWithData)

        // 路径
        let file = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        // 拼接路径 自动带斜杠的
        let filePath = (file as NSString).appendingPathComponent("UserAccount.archiver")
        do {
            let data = try Data.init(contentsOf: URL(fileURLWithPath: filePath))
            // 当用户首次登陆, 直接从沙盒获取数据, 就会为nil  所以这里需要使用as?
            let model = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? "已经存入的自定义类型的数据"
            return model
        } catch {
            print("获取data数据失败: \(error)")
        }

.End

相关文章

  • iOS 5种数据存储

    1.归档解档 归档 解档 2.NSUserDefaults 时候存储少量基本数据类型,比如Array、Bool、S...

  • Swift-归档解档存储自定义类型数据

    模型内部操作外部存储、获取操作 1. 模型内部操作 1.1. 模型类必须继承NSObject 、NSCoding,...

  • iOS存储

    解档归档 需要遵守NScoding协议 优点:存储自定义数据对象 缺点:只能一次性归档保存以及一次性解压。所以针对...

  • 数据存储-归档解档

    1.介绍 2.注意: 3.归档对象的写法 4.归档 -- NSKeyedArchiver 5.解档 -- NSKe...

  • iOS 开发:Runtime(详解七)归档解档

    1、归档解档介绍 归档解档是一种常用的轻量型文件存储方式,在项目中,如果需要将数据模型本地化存储,一般就会用到归档...

  • CoreData的使用(二)

    一、概述数据存储可以使用plist,NSUserDefault,归档解档,sqlite,CoreDataCoreD...

  • iOS存储自定义对象

    使用MJExtension进行自定义对象解档归档达到存储自定义对象的功能 UserInfoModel.h在模型的....

  • Runtime实例运用-归档解档

    解档归档是存储方法之一,我们先来回忆一下都有哪些存储方法。 一.回忆存储方法: XML归档解档 NSUserDef...

  • swift FMDB存储自定义对象模型

    //存储自定义的对象关键就是要转换成NSData类型并已BLOB类型存储。此处需要用到归档和解档 // MARK:...

  • runtime使用 自定义数据类型的编码解码

    通过runtime 遍历自定义model的所有属性实现归档解档操作。 要实现我们自定义的model能够自动解档归档...

网友评论

      本文标题:Swift-归档解档存储自定义类型数据

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