Jim*_*Jim 2 core-data nsuserdefaults nsmanagedobject ios swift
我在 userDefaults 中保存 NSManagedObject 有困难,我想知道 a) 我应该尝试这样做还是这不是一种合适的方法,或者 b) 如果它是一种合适的方法,我怎样才能让它工作?
我正在用 Swift 2.3 编写我的应用程序,它有一些用户默认选项,其中一个用于默认“提升”(如举重,例如“卧推”、“挺举”、“倾斜卧推” )。我实际上将它们从枚举转换为核心数据实体,因为用户能够跟踪的每个电梯事件都将是可用的电梯类型之一(我将为其建立适当的关系)。
这是具有属性的扩展:
extension Lift {
@NSManaged var liftName: String
@NSManaged var type: NSSet
}
Run Code Online (Sandbox Code Playgroud)
以及带有 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
}
}
Run Code Online (Sandbox Code Playgroud)
我以前处理过这些类型的错误,所以我真正关心的是我是否走上了错误的道路。
今晚我读了很多线程,这些线程告诉我我需要对一个对象(但不是特别是 NSManagedObject)进行编码以保存它,然后在检索它时将其取消编码,并且我的类必须符合 NSCoding 以及该协议要求的内容。但后来我看到线程是说NSManagedObjects应该不被存储在userDefaults,但我不知道这是不是真的。
我已经在这上面花了几个小时,所以在我走得更远之前,可以/应该这样做吗?
不,你不应该存储NSManagedObjectin NSUserDefaults。Core Data 是一种对象持久化技术,因此尝试NSManagedObject以其他格式持久化 an 是没有意义的。
您可以使用以下几种替代方法:
default然后再次使用查询来检索它;您需要确保一次仅在一次电梯上将该值设置为 true。managedObject.objectId.uriRepresentation来获取可以存储为字符串的 URL,然后用于稍后检索对象。这可能是最复杂的解决方案,我建议您尝试其他选项之一。| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |