自定义类 Unarchive 在 Cocoa Swift 中为零

Posted

技术标签:

【中文标题】自定义类 Unarchive 在 Cocoa Swift 中为零【英文标题】:Custom Class Unarchive is nil in Cocoa Swift 【发布时间】:2017-02-04 16:13:10 【问题描述】:

我正在尝试在我的 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
    

【问题讨论】:

tempData 为零吗? No tempData 不是 nil 【参考方案1】:

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

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

与:

decoder.decodeInteger(forKey: "leftClickCount")

【讨论】:

以上是关于自定义类 Unarchive 在 Cocoa Swift 中为零的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa/Objective C:方法和线程安全

Cocoa:从另一个类调用 App Delegate 方法

Cocoa 自定义 NSDocument 保存

Cocoa:如何让表格视图在每个单元格中绘制自定义视图

如何在没有额外自定义代码的情况下强制使正在运行的 Cocoa 程序失效?

Cocoa 中的自定义 NSPredicate