Ios 创建仅内存的NSManagedObject模型
我需要创建一个NSManagedObject实例,它不会保存在CoreData中,而只保存在内存中 e、 g: 我有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,它们之间有关系。
我希望能够创建一个没有任何核心数据属性的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作为字符串存储在项中)。似乎就是这样。谢谢