【发布时间】:2016-12-01 05:46:49
【问题描述】:
我在 userDefaults 中保存 NSManagedObject 时遇到困难,我想知道 a) 我应该尝试这样做还是这不是合适的方法,或者 b) 如果它是合适的方法,我怎么能得到它可以工作吗?
我正在用 Swift 2.3 编写我的应用程序,它有一些用户默认选项,其中一个是默认的“提升”(如举重,例如“卧推”、“挺举”、“倾斜”卧推')。我实际上是将它们从枚举转换为核心数据实体,因为用户能够跟踪的每个提升事件都是可用的提升类型之一(我将为此建立适当的关系)。
这是带有属性的扩展:
extension Lift {
@NSManaged var liftName: String
@NSManaged var type: NSSet
}
还有带有 Xcode 抱怨的 Lift 实体:
class Lift: NSManagedObject, NSCoding {
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(liftName, forKey: "liftName")
} // Super.init isn't called on all paths before returning from initializer
required init(coder aDecoder: NSCoder) {
// Initialization of immutable variable was never used, etc...
let liftName = aDecoder.decodeObjectForKey("liftName") as! String
}
}
我以前处理过这些类型的错误,所以我真正关心的是我是否走错了路。
今晚我阅读了许多线程,这些线程告诉我我需要编码一个对象(但不是特别是 NSManagedObject)来保存它,然后在检索它时取消编码,并且我的类必须符合 NSCoding 和什么协议要求。但是后来我看到threads 说NSManagedObjects 应该不 存储在userDefaults 中,但我不知道这是不是真的。
我已经为此花费了几个小时,所以在我继续之前,可以/应该这样做吗?
【问题讨论】:
标签: ios swift core-data nsuserdefaults nsmanagedobject