0

我需要创建一个NSManagedObject的实例,它不会保存在CoreData中,而只能保存在内存中。创建一个仅限内存的NSManagedObject模型

例如为:

我有ItemLog NSManagedObject,他们有他们之间的关系。 我希望能够创建没有任何核心数据属性的Log实例,并将其item属性分配给Item实例。

我知道我可以在不同的存储器持久性上下文(或上下文nil)中创建它。但后来我无法指定item属性,因为我的Item实例处于核心数据上下文中。

Illegal attempt to establish a relationship 'item' between objects in different contexts

我怎样才能用另一种方式实现这一目标:

NSEntityDescription *description = [NSEntityDescription entityForName:@"Log" inManagedObjectContext:defaultContext]; 
Log *log = [[Log alloc] initWithEntity:description insertIntoManagedObjectContext:nil]; 
log.item = item; 

此代码运行时抛出一个异常?

回答

1

您可以创建一个NSManagedObjectContext并将父上下文设置为Log的MOC。

+0

这似乎是它。谢谢! – Indigon 2014-10-21 12:20:23

1

你需要关系有一个逆?如果没有,您可以使用Item对象的ObjectID作为Log实体中的一个属性。您将需要的对象ID转换成其URIRepresentation,然后将其转换成一个的NSString:

NSURL *itemURI = [item.objectID URIRepresentation]; 
NSString *itemURIstring = [itemURI absoluteString]; 
log.itemURI = itemURIstring; 

(如果项目尚未保存到数据库中,它将有一个临时的ID - 你应该测试这个与item.objectID.isTemporary否则对象ID可能会改变)。当您想为给定的Log对象找到Item对象时,反转该过程:

NSURL *itemURI = [NSURL URLwithString:log.itemURI]; 
NSManagedObjectID *itemObjectID = [self.context.persistentStoreCoordinator managedObjectIDForURIRepresentation:itemURI]; 
Item *item = [self.context objectWithID:itemObjectID]; 

非常麻烦!

我想如果你需要一个反例,你可以做同样的事情(即将Log对象的URI作为Item中的字符串存储)。

相关问题