iOS (Swift):核心数据可转换属性

iOS (Swift): Core data transformable attributes

我有一个简单的 Time class 采用 NSCoding 协议:

class Time: NSObject, NSCoding {

    var hours: Int

    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.hours, forKey: "hours")
    }

    public required init?(coder aDecoder: NSCoder) {
        guard let hours = aDecoder.decodeObject(forKey: "hours") as? Int
            else { return nil }
        self.hours = hours
    }

    init(hours: Int) {
        self.hours = hours
    }

}

我想成为我的 Watch 实体的 Transformable 属性:

final class Watch: NSManagedObject {
    @NSManaged public fileprivate(set) var time: Time
}

如图所示:

我成功地将其保存到托管对象上下文中,但是当我重新加载应用程序时,time 属性为 nil

我是不是漏掉了什么?为什么这个属性没有成功保存?这似乎是其他帖子所需要的。

非常感谢您的帮助!

@IraniyaNaynesh 在问题评论中的建议是转移注意力。

答案其实很简单。将init?(coder aDecoder: NSCoder)方法中的decodeObject改为decodeInteger,数据恢复为BLOBS,即notnil和已从 SQLite 数据库成功保存。