我在私有上下文中有NSManagedObject
我已经关联到私有队列。此NSManagedObject
与许多其他NSManagedObject
有关系。我想将此前NSManagedObject
及其所有“嵌套”相关对象传递给我的主上下文,而不保存私有上下文,所以我试图这样做:
__block NSManagedObjectID *privateObjectID = nil;
[privateContext performBlockAndWait: ^{
MyEntity *privateMyEntity = [self createMyEntityInContext:privateContext];
privateObjectID = [privateMyEntity valueForKeyPath:@"objectID"];
}];
if (privateObjectID != nil) {
self.currentMyEntity = [mainContext objectWithID:privateObjectID];
}
但我发现self.currentMyEntity
已丢失其相关对象(其NSSet
为空)。
但是,如果我在传递托管对象之前保存私有上下文,那么在self.currentMyEntity
中我也会得到相关对象:
__block NSManagedObjectID *privateObjectID = nil;
[privateContext performBlockAndWait: ^{
MyEntity *privateMyEntity = [self createMyEntityInContext:privateContext];
[self saveContext:privateContext];
privateObjectID = [privateMyEntity valueForKeyPath:@"objectID"];
}];
if (privateObjectID != nil) {
self.currentMyEntity = [mainContext objectWithID:privateObjectID];
}
为什么呢?我不想将对象保存在私有上下文中......
提前致谢
答案 0 :(得分:2)
我认为你应该阅读Core Data Programming Guide,然后你应该重新评估你想要完成的事情。
首先,如果您不将数据保存在任何地方,您如何期望单独的上下文获取有关该对象的任何内容?就该上下文而言,该对象甚至不存在?他们有什么共同点?持久性商店协调员?持久的商店?如果他们共同拥有的实体没有数据,那么不同的上下文应该如何交换数据呢?
其次,您无法在上下文之间传递临时对象ID,并希望使用它们。
第三,objectWithID
总是返回一个对象,即使该对象不存在,所以你应该只在某些情况下使用它。
如果您不想在私人环境中保存对象,那么您想用它做什么?
如果您只想将其传递给其他上下文,则可以将私有上下文创建为其他上下文的子上下文。从私有上下文保存时,它只会将数据保存到该上下文中,而不保存到数据库中。