如何在NSUserDefault中设置实体

时间:2013-12-18 10:48:16

标签: ios objective-c core-data nsuserdefaults

我们可以将核心日期实体存储到NSUser NSUserDefault中。我正在尝试保存实体。但是它在我想要使用的地方返回null。但是如果我尝试保存实体属性.it返回阀门。

如果我使用以下内容保存实体

下面是我的代码示例

    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"];

4 个答案:

答案 0 :(得分:5)

来自documentation(强调补充):

  

NSUserDefaults类提供了便于访问的方法   常见类型,例如浮点数,双精度数,整数,布尔值和URL。一个   默认对象必须是属性列表,即(或   对于集合的实例组合:NSDataNSString,   NSNumberNSDateNSArrayNSDictionary如果你想存储任何   在其他类型的对象中,通常应将其存档以创建   NSData的实例。

换句话说:如果您要存储的内容不是NSDataNSStringNSNumberNSDateNSArray或{{1你需要序列化和反序列化它。如果您的对象支持NSDictionary,则可以使用NSCoding进行/解码。例如,您还可以序列化字典与字符串表示。

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

答案 1 :(得分: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];

答案 2 :(得分:2)

要将自定义对象存储到NSUserDefaults中,您需要在对象中实现encodeWithCoderinitWithCoder方法(NSCoding protocol)。

这个问题有一个很好的答案: How to store custom objects in NSUserDefaults

答案 3 :(得分:2)

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