2013-12-18 42 views
3

我们可以将核心日期实体存储到NSUser NSUserDefault中。我试图保存实体。但它在我想使用的位置返回null。但如果我尝试保存实体属性.it返回阀门。下面如何在NSUserDefault中设置实体

是我的代码示例,如果我使用以下方法来挽救实体

MyEntity *newEntity = [self.fetchController objectAtIndexPath:indexPath]; 
    [[NSUserDefaults standardUserDefaults]setObject:newEntity forKey:@"Act"]; 

,并使用以下方法来获取实体。结果是空的。

 MyEntity *entityAtOtherClass =[[NSUserDefaults standardUserDefaults] valueForKey:@"Act"]; 

如果我试图存储实体属性说一些字符串,那么我能够得到这个实体对象的值。

[[NSUserDefaults standardUserDefaults]setValue:newEntity.name forKey:@"Activity"]; 
+0

你是否同步到nsuserdedefault? –

+0

不,请检查这个 – Shekhu

回答

3

如果你想回到同一个对象,那么你并不需要存储整个对象 - 只是它的对象ID。

存储很容易:

NSString *myObjectToStore = [[[myObject objectID] URIRepresentation] absoluteString]; 
[[NSDefaults standardUserDefaults] setObject:myObjectToStore forKey:@"myKey"]; 

获取物体背面是有点困难,因为你需要有你想要使用的持久性存储和上下文的引用;我认为他们在myPersistentStoremyContext

NSURL *myObjectURL = [NSURL URLWithString:[[NSDefaults standardUserDefaults] objectForKey:@"myKey"]]; 
NSManagedObjectID *myObjectID = [myPersistentStore managedObjectIDForURIRepresentation:myObjectURL]; 

NSError *error = nil; 
MYManagedObjectClass *myObject = [myContext existingObjectWithID:myObjectId error:&error]; 
+0

,非常感谢。我的作品 – Shekhu

+3

我不会推荐使用像这样的objectID。 objectID可以并且确实会改变。生成自己的唯一标识符要更安全,将其存储在Core Data中并在'NSUserDefaults'中引用它。否则,在你的第一次迁移中,这个值可能会改变 –

+0

@ MarcusS.Zarra谢谢您指出。但请您告诉我您的意思是“首次迁移,价值可能会发生变化”。抱歉已经差不多一年了,我已经问过这个问题了,但是如果你能告诉我一些关于这个问题,我会很感激。因为我仍然在这里学习'东西' – Shekhu

5

documentation(强调加):

NSUserDefaults类提供用于访问 常见类型如浮标方便的方法,双打,整数,布尔值,和URL。甲 缺省对象必须是一个属性列表,也就是,的一个实例(用于集合或 的实例的组合):NSDataNSStringNSNumberNSDateNSArray,或者NSDictionary如果要存储任何其他类型的对象,则通常应对其进行存档以创建NSData的实例 。

换句话说:如果你想存储的东西,是不是NSDataNSStringNSNumberNSDate,你需要序列化和反序列化NSArrayNSDictionary。如果您的对象支持NSCoding,则可以使用NSKeyedArchiver进行解码/解码。例如,您也可以序列化字典与字符串表示形式。

另请参阅-[NSUserDefaults setObject:forKey:的文档。

+0

,非常感谢............ – Shekhu

2

什么你指的是作为“核心数据实体”你的问题似乎是实际上是一个NSManagedObject子类,而不是一个NSEntityNSManagedObject实例不能存储在Core Data之外。西蒙的回答是一个好方法。只要确保你有对象的永久NSManagedObjectID,而不是一个临时的。