我们可以将核心日期实体存储到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"];
答案 0 :(得分:5)
来自documentation(强调补充):
NSUserDefaults
类提供了便于访问的方法 常见类型,例如浮点数,双精度数,整数,布尔值和URL。一个 默认对象必须是属性列表,即(或 对于集合的实例组合:NSData
,NSString
,NSNumber
,NSDate
,NSArray
或NSDictionary
。 如果你想存储任何 在其他类型的对象中,通常应将其存档以创建NSData
的实例。
换句话说:如果您要存储的内容不是NSData
,NSString
,NSNumber
,NSDate
,NSArray
或{{1你需要序列化和反序列化它。如果您的对象支持NSDictionary
,则可以使用NSCoding
进行/解码。例如,您还可以序列化字典与字符串表示。
答案 1 :(得分:3)
如果你想要取回同一个对象,那么你不需要存储整个对象 - 只需它的对象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];
答案 2 :(得分:2)
要将自定义对象存储到NSUserDefaults中,您需要在对象中实现encodeWithCoder
和initWithCoder
方法(NSCoding protocol)。
这个问题有一个很好的答案: How to store custom objects in NSUserDefaults
答案 3 :(得分:2)
您在问题中所指的“核心数据实体”实际上似乎是NSManagedObject
子类,而不是NSEntity
。 NSManagedObject
个实例不能存储在Core Data之外。西蒙的回答是一个很好的方法。只需确保您拥有对象的永久NSManagedObjectID
,而不是临时对象。