Ios 创建仅内存的NSManagedObject模型

Ios 创建仅内存的NSManagedObject模型,ios,objective-c,core-data,nsmanagedobject,nsmanagedobjectcontext,Ios,Objective C,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我需要创建一个NSManagedObject实例,它不会保存在CoreData中,而只保存在内存中 e、 g: 我有项和日志NSManagedObject,它们之间有关系。 我希望能够创建一个没有任何核心数据属性的Log实例,并将其item属性分配给item实例 我知道我可以在不同的内存持久性上下文(或nilcontext)中创建它。但是我不能分配item属性,因为我的item实例位于核心数据上下文中 NSEntityDescription *description = [NSEntityDes

我需要创建一个NSManagedObject实例,它不会保存在CoreData中,而只保存在内存中

e、 g:

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

我知道我可以在不同的内存持久性上下文(或
nil
context)中创建它。但是我不能分配
item
属性,因为我的
item
实例位于核心数据上下文中

NSEntityDescription *description = [NSEntityDescription entityForName:@"Log" inManagedObjectContext:defaultContext];
Log *log = [[Log alloc] initWithEntity:description insertIntoManagedObjectContext:nil];
log.item = item;
此代码在运行时引发异常:

非法尝试在不同上下文中的对象之间建立关系“项”


如何以另一种方式实现这一点?

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

您是否需要将该关系设置为反向关系?如果没有,则可以将项对象的ObjectID用作日志实体中的属性。您需要将ObjectID转换为其URIRepresentation,然后将其转换为NSString:

NSURL *itemURI = [item.objectID URIRepresentation];
NSString *itemURIstring = [itemURI absoluteString];
log.itemURI = itemURIstring;
(如果项目尚未保存到数据库,它将有一个临时ID-您应该使用
item.objectID.istemporation
对此进行测试,否则objectID可能会更改)。如果要查找给定日志对象的项对象,请反向执行此过程:

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


我想如果您需要一个反向,您也可以这样做(即,将日志对象的URI作为字符串存储在项中)。

似乎就是这样。谢谢