• [Xcode 实际操作]七、文件与数据-(10)NSkeyedArchiver存储和解析数据,Swift对象的归档和恢复归档


    目录:[Swift]Xcode实际操作

    本文将演示如何使用归档的方法,对模型对象进行持久化工作。

    在项目名称上点击鼠标右键,弹出右键菜单,选择【New File】新建文件命令,

    在弹出的模板选项窗口中,选择【Swift】文件选项,创建一模型对象。

    ->【Next】->在存储为输入框内,输入属性列表文件的名称,

    【Save As】:UserModel.swift

    ->然后点击创建【Create】按钮,确认属性列表文件的创建

    在自动打开的代码文件【UserModel.swift】中,创建一个基本对象模型。

     1 import Foundation
     2 
     3 //创建一个继承自NSObject的类,并遵守NSCoding协议
     4 //遵守NSCoding协议的类,可以被序列化和反序列化,
     5 //这样可以归档到磁盘上或分发到网络上
     6 class UserModel: NSObject, NSCoding
     7 {
     8     //添加姓名属性
     9     var name:NSString!
    10     //添加密码属性
    11     var password:NSString!
    12     
    13     //添加一个来自协议的方法,用来对模型对象进行序列化操作
    14     func encode(with aCoder: NSCoder)
    15     {
    16         //对模型的姓名进行编码操作,并设置对应的键名
    17         aCoder.encode(self.name, forKey: "name")
    18         //对模型的密码进行编码操作,并设置对应的键名
    19         aCoder.encode(self.password, forKey: "password")
    20     }
    21     
    22     //添加一个来自协议的方法,用来对模型对象进行反序列化操作
    23     required init(coder aDecoder: NSCoder)
    24     {
    25         super.init()
    26         //对模型对象的姓名属性,根据对应的键名,进行解码操作
    27         self.name = aDecoder.decodeObject(forKey: "name") as? NSString
    28         //对模型对象的密码属性,根据对应的键名,进行解码操作
    29         self.password = (aDecoder.decodeObject(forKey: "password") as! NSString)
    30     }
    31     
    32     //重载父类的初始化方法
    33     override init()
    34     {
    35         
    36     }
    37 }

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

    现在开始编码,创建一个模型对象,并对其进行归档和恢复归档的操作。

    归档:指的使将Swift对象,存储为一个文件或网络上的数据块。

    恢复归档:指的是将一个来自文件或网络的归档数据块,恢复成内存中的一个Swift对象。

     1 import UIKit
     2 
     3 class ViewController: UIViewController {
     4 
     5     override func viewDidLoad() {
     6         super.viewDidLoad()
     7         // Do any additional setup after loading the view, typically from a nib.
     8         
     9         //初始化上文定义的对象模型
    10         let user1 = UserModel()
    11         //设置对象名称的值
    12         user1.name = "Jerry"
    13         //设置对象密码的值
    14         user1.password = "123"
    15         
    16         //创建一个可变二进制数据对象,用来存储归档后的模型对象
    17         let data = NSMutableData()
    18         //使数据对象,初始化一个键值归档对象
    19         let archive = NSKeyedArchiver(forWritingWith: data)
    20         //对模型对象进行归档操作。
    21         //归档:指的使将Swift对象,存储为一个文件或网络上的数据块。
    22         archive.encode(user1, forKey: "user1Key")
    23         //完成归档的编码,即序列化操作。
    24         archive.finishEncoding()
    25         
    26         //初始化一个字符串对象,作为归档文件的存储路径
    27         let filePath = NSHomeDirectory() + "/Documents/contacts.data"
    28         //将归档文件,存储在程序包的指定位置
    29         data.write(toFile: filePath, atomically: true)
    30         
    31         //现在来对归档文件进行加载和恢复归档的操作
    32         //读取刚刚保存的二进制文件
    33         let fileData = NSMutableData(contentsOfFile: filePath)
    34         //对文件进行恢复归档操作
    35         //恢复归档:指的是将一个来自文件或网络的归档数据块,恢复成内存中的一个Swift对象。
    36         let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
    37         
    38         //根据设置的键名,对数据进行恢复归档操作,并获得最终结果
    39         let savedUser = unarchiver.decodeObject(forKey: "user1Key") as! UserModel
    40         //完成对象的解码操作
    41         unarchiver.finishDecoding()
    42         
    43         //在控制台打印输出对象的两个属性
    44         print(savedUser.name)
    45         print(savedUser.password)
    46     }
    47 
    48     override func didReceiveMemoryWarning() {
    49         super.didReceiveMemoryWarning()
    50         // Dispose of any resources that can be recreated.
    51     }
    52 }
  • 相关阅读:
    【android】 判断文件是否存在,ImageView scaletype
    【live】回老家,那些感触
    【android】 浏览文件,如浏览sd卡下的图片文件
    【android】java.lang.NoClassDefFoundError或classnotfount等异常错误
    【android】style和theme
    【android】两个按钮的宽度各占屏幕的一半
    【java】html解析
    关于敏感词过滤的一点想法
    JAVA中Vector与ArrayList异同
    MySQL实用语句 GROUP BY ... HAVING ...
  • 原文地址:https://www.cnblogs.com/strengthen/p/10049316.html
Copyright © 2020-2023  润新知