我在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
中,但我不知道这是否属实。
我花了几个小时才这样做,所以在我走得更远之前,可以/应该这样做吗?
答案 0 :(得分:3)
不,您不应在NSManagedObject
中存储NSUserDefaults
。核心数据是一种对象持久性技术,因此尝试以某种其他格式保留NSManagedObject
是没有意义的。
您可以使用的替代品很少:
default
添加新的布尔属性,并再次使用查询来检索它;您需要确保一次只能在一个电梯上将值设置为true。managedObject.objectId.uriRepresentation
获取可以存储为字符串的URL,然后使用该URL来检索该对象。这可能是最复杂的解决方案,我建议您尝试其他选项之一。答案 1 :(得分:0)
不,你不能这样做。您无法在“用户默认值”中保存Core Data对象。它只能保存在DB中。
答案 2 :(得分:0)
NSUserDefaults
中的可存储类型。
NSUserDefaults
类的行为非常类似于属性列表(也称为plist)。对于一个plist来说它可能只是一个奇特的界面,或者它可能更多,我不完全确定。尽管如此,plist仍然限制他们可以存储什么样的对象。六种类型的plists可以存储:
因此,您需要在NSKeyedArchiver
中使用。
let ArchvieArr = NSMutableArray()
ArchvieArr.addObject(NSKeyedArchiver.archivedDataWithRootObject(LiftObj)).
NSUserDefaults.standardUserDefaults().setObject(ArchvieArr, forKey: "savedArray")
答案 3 :(得分:0)
这两个完全是两回事。 NSUserDefault
存储了NSManagedObject
存储轻量级或大量数据的轻量级数据,并且速度非常快NSUserDefault
1}}用于存储和检索目的。
NSManagedObject -> NSManagedObject
链接到 coredata 。
你应该存储一大堆元素。至于您的上一个问题,没有什么能阻止您同时使用Core Data和后端来存储数据。事实上,有一些框架可以促进这一点。
NSUserDefaults -> NSUserDefaults
是一个允许不同数据类型的简单存储的类。它非常适合在应用程序启动或设备重启之间持续存在的少量信息。 NSUserDefaults
不足以存储和查询大量数据。如果您有一个后端(服务器上的数据库)来存储事件及其被邀请者持续存在,这是明智的。用户信息的一致性(如果用户从其他应用程序支持设备登录到您的应用程序,那么他将获得他存储的所有信息)。
NSUserDefaults
支持以下数据类型:
NSString
,NSNumber
,NSDate
,NSArray
,NSDictionary
和NSData
希望它会对你有所帮助。