您的位置:首页 > 移动开发 > Swift

学习笔记(05):iOS移动开发从入门到精通(Xcode11 & Swift5)-NSKeyedArchiver存储和解析数据...

2020-06-01 05:00 1056 查看

立即学习:https://edu.csdn.net/course/play/26947/347242?utm_source=blogtoedu

ViewController.swift

 

import UIKit

 

class ViewController: UIViewController {

 

    override func viewDidLoad() {

        super.viewDidLoad()

        //创建一个模型对象并对其进行归档和恢复归档操作

        //初始化刚定义的对象模型

        let user1 = UserModel()

        //设置对象名称和密码属性值

        user1.name = "Jerry"

        user1.password = "123"

        //添加异常捕捉语句,用来执行归档和恢复归档操作

        do {

            //创建一个可变二进制数据对象,用来存储归档后的模型对象。归档指的是将Swift对象存储为一个文件或网络上的一个数据块

            let data = try NSKeyedArchiver.archivedData(withRootObject: user1, requiringSecureCoding: true)

            //将归档的数据存储在程序包的Preference目录

            UserDefaults.standard.set(data, forKey: "user1")

            UserDefaults.standard.synchronize()

            

            //对归档数据进行加载和恢复归档操作

            //读取刚刚保存的数据

            let dataFrom = UserDefaults.standard.data(forKey: "user1")

            //恢复归档操作,恢复成内存中一个Swift对象

            let savedUser = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(dataFrom!) as? UserModel

            print(savedUser?.name ?? "")

            print(savedUser?.password ?? "")

        }

        catch {

            print("Archive error.")

        }

        // Do any additional setup after loading the view.

    }

}

 

UserModel.swift

 

import Foundation

//创建基本对象模型

//创建一个继承自NSObject的类并遵循NSCoding协议。遵循该协议的类可以被序列化和反序列化。这样可以归档到磁盘上或分发到网络上

class UserModel: NSObject, NSCoding, NSSecureCoding {

    //为对象模型添加姓名和密码两个属性

    static var supportsSecureCoding: Bool = true

    var name: NSString!

    var password: NSString!

    //添加一个序列方法用来对模型对象进行序列化操作

    func encode(with aCoder: NSCoder) {

        //对模型对象的姓名和密码属性进行编码操作,并设置对应的键名

        aCoder.encode(self.name, forKey: "name")

        aCoder.encode(self.password, forKey: "password")

    }

    //添加另一个来自协议的方法用来对模型对象进行反序列化操作

    required init(coder aDecoder: NSCoder) {

        super.init()

        //对模型对象的姓名和密码属性进行解码操作

        self.name = aDecoder.decodeObject(forKey: "name") as? NSString

        self.password = (aDecoder.decodeObject(forKey: "password") as! NSString)

    }

    //重载父类的初始化方法

    override init() {

    

    }

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: