Ios 如何在NSUserDefault中设置实体
我们是否可以将核心日期实体存储到NSUser NSUserDefault中。因为我正在尝试保存该实体。但它在我要使用的位置返回null。但如果我尝试保存实体属性,它将返回阀门的值 下面是我使用以下命令保存实体时的代码示例Ios 如何在NSUserDefault中设置实体,ios,objective-c,core-data,nsuserdefaults,Ios,Objective C,Core Data,Nsuserdefaults,我们是否可以将核心日期实体存储到NSUser NSUserDefault中。因为我正在尝试保存该实体。但它在我要使用的位置返回null。但如果我尝试保存实体属性,它将返回阀门的值 下面是我使用以下命令保存实体时的代码示例 MyEntity *newEntity = [self.fetchController objectAtIndexPath:indexPath]; [[NSUserDefaults standardUserDefaults]setObject:newEntity
MyEntity *newEntity = [self.fetchController objectAtIndexPath:indexPath];
[[NSUserDefaults standardUserDefaults]setObject:newEntity forKey:@"Act"];
并使用以下命令获取实体。结果为null
MyEntity *entityAtOtherClass =[[NSUserDefaults standardUserDefaults] valueForKey:@"Act"];
如果我试图存储实体属性,比如字符串,那么我就能够获得这个实体对象的值
[[NSUserDefaults standardUserDefaults]setValue:newEntity.name forKey:@"Activity"];
从(强调添加):
NSUserDefaults
类提供了方便的访问方法
常见类型,如浮点、双精度、整数、布尔和URL。A.
默认对象必须是属性列表,即(或)的实例
对于集合:NSData
,NSString
,的实例组合,
NSNumber
,NSDate
,NSArray
或NSDictionary
如果要存储任何
对于其他类型的对象,通常应将其存档以创建
NSData的实例
换句话说:如果要存储的内容不是NSData
、NSString
、NSNumber
、NSDate
、NSArray
或NSDictionary
,则需要对其进行序列化和反序列化。如果您的对象支持NSCoding
,则可以使用NSKeyedArchiver
进行编码/解码。例如,还可以用字符串表示法序列化字典
另请参见。的文档为了将自定义对象存储到NSUserDefaults中,您需要在对象中实现
encodeWithCoder
和initWithCoder
方法()
这个问题有一个很好的答案:
如果要取回相同的对象,则不需要存储整个对象,只需存储其对象ID即可 存储起来很容易:
NSString *myObjectToStore = [[[myObject objectID] URIRepresentation] absoluteString];
[[NSDefaults standardUserDefaults] setObject:myObjectToStore forKey:@"myKey"];
取回对象有点困难,因为您需要对要使用的持久存储和上下文进行引用;我假设它们在myPersistentStore
和myContext
中:
NSURL *myObjectURL = [NSURL URLWithString:[[NSDefaults standardUserDefaults] objectForKey:@"myKey"]];
NSManagedObjectID *myObjectID = [myPersistentStore managedObjectIDForURIRepresentation:myObjectURL];
NSError *error = nil;
MYManagedObjectClass *myObject = [myContext existingObjectWithID:myObjectId error:&error];
您在问题中提到的“核心数据实体”似乎实际上是一个
NSManagedObject
子类,而不是NSEntity
<代码>NSManagedObject实例不能存储在核心数据之外。西蒙的回答是一个很好的方法。只需确保您拥有对象的永久NSManagedObjectID
,而不是临时对象。是否同步到NSUseredDefault?我不建议像这样使用objectID。objectID可以而且确实会改变。生成您自己的唯一标识符,将其存储在核心数据中,并在NSUserDefaults
中引用它,这要安全得多。否则,在您的第一次迁移中,该值可能会发生变化。@MarcusS.Zarra感谢您的指出。但您能告诉我“第一次迁移,该值可能会发生变化”的确切含义吗?对不起,差不多一年了,我问了这个问题,但如果您能告诉我一点,我将不胜感激。因为我还在学习东西
here@MarcusS.Zarra我买了《实用程序员的核心数据》一书,期待着更多地探索核心数据:)-objectID在当前应用程序生命周期中是独一无二的。然而,这并不保证是一致的。这意味着它可以在应用程序的生命周期之间更改。例如,如果执行迁移,则该值将更改。同样,如果使用iCloud,该值可能会更改。