Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从archiveRootObject迁移到ArchiveData_Ios_Swift - Fatal编程技术网

Ios 从archiveRootObject迁移到ArchiveData

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) {

我在下面有两个模型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) {
        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
    }