Ios 从archiveRootObject迁移到ArchiveData
我在下面有两个模型swift文件Ios 从archiveRootObject迁移到ArchiveData,ios,swift,Ios,Swift,我在下面有两个模型swift文件 // Item.swift import UIKit class Item: NSObject, NSCoding { var name: String var valueInDollars: Int var serialNumber: String? let dateCreated: Date let itemKey: String func encode(with aCoder: NSCoder) {
// Item.swift
import UIKit
class Item: NSObject, NSCoding {
var name: String
var valueInDollars: Int
var serialNumber: String?
let dateCreated: Date
let itemKey: String
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
aCoder.encode(dateCreated, forKey: "dateCreated")
aCoder.encode(itemKey, forKey: "itemKey")
aCoder.encode(serialNumber, forKey: "serialNumber")
aCoder.encode(valueInDollars, forKey: "valueInDollars")
}
required init(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "name") as! String
dateCreated = aDecoder.decodeObject(forKey: "dateCreated") as! Date
itemKey = aDecoder.decodeObject(forKey: "itemKey") as! String
serialNumber = aDecoder.decodeObject(forKey: "serialNumber") as! String?
valueInDollars = aDecoder.decodeInteger(forKey: "valueInDollars")
super.init()
}
}
这两个模型文件符合NSCoding协议,并使用archiveRootObject对数据进行归档
但是archiveRootObject已被弃用,而且NSCoding不如NSSecureCoding安全,我如何调整代码以调整所有这些?您可以将您的
saveChanges
函数重写为以下内容:
func saveChanges() -> Bool {
print("Saving items to: \(itemArchiveURL.path)")
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: allItems, requiringSecureCoding: false)
try data.write(to: itemArchiveURL)
}
catch {
print("Error archiving data: \(error)")
return false
}
return true
}
有了这组符合JSON或属性列表的属性,我们鼓励您使用更轻量级的
Codable
协议(它甚至可以序列化结构)。似乎一些持久数据只确认旧的NSCoding协议,所以我选择了平衡协议。
func saveChanges() -> Bool {
print("Saving items to: \(itemArchiveURL.path)")
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: allItems, requiringSecureCoding: false)
try data.write(to: itemArchiveURL)
}
catch {
print("Error archiving data: \(error)")
return false
}
return true
}