Custom Class Unarchive在Cocoa Swift中是零

时间:2017-02-04 16:13:10

标签: swift macos cocoa macos-sierra userdefaults

我正在尝试在我的macOS应用中保存并检索自定义类到UserDefaults。我为 newData

获得 nil
class countClass: NSObject, NSCoding {
    var leftClickCount : Int = 0

    init(leftClickCount: Int) {
        self.leftClickCount = leftClickCount
        super.init()
    }

    func encode(with coder: NSCoder) {
        coder.encode(self.leftClickCount, forKey: "leftClickCount")
    }

    required convenience init?(coder decoder: NSCoder) {
        guard let leftClickCount = decoder.decodeObject(forKey: "leftClickCount") as? Int
            else {
            return nil
        }
        self.init(
            leftClickCount: leftClickCount
        )
    }
}

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let leftC = countClass(leftClickCount: 25)
        let ud = UserDefaults.standard
        let archivedData = NSKeyedArchiver.archivedData(withRootObject: leftC)
        ud.set(archivedData, forKey: "data")
        ud.synchronize()
        let tempData = ud.object(forKey: "data") as! Data
        let newData = NSKeyedUnarchiver.unarchiveObject(with: tempData) as! countClass // Getting nil here
    }
}

1 个答案:

答案 0 :(得分:0)

我可以通过改变来解决这个问题:

decoder.decodeObject(forKey: "leftClickCount") as? Int

使用:

decoder.decodeInteger(forKey: "leftClickCount")