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

时间:2018-06-10 19:22:34

标签: ios swift core-data nscoding transformable

我有一个简单的Time类,它采用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
    }

}

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

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

如下所示:

enter image description here

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

我在这里遗漏了什么吗?为什么这个属性没有成功保存?这似乎是其他帖子所需的全部内容。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

@IraniyaNaynesh在问题评论中提出的建议是红鲱鱼。

答案结果很简单。在decodeObject方法中将decodeInteger更改为init?(coder aDecoder: NSCoder),数据将恢复{{1>}, BLOBS并已保存成功地,来自SQLite数据库。