我有一个实体A,它与实体B有多对多的关系以及相应的反向关系。
我将B对象添加到A中:
NSMutableSet *bSet = [aObj mutableSetValueForKey:@"B"];
for (bData in some array) {
[ create and insert bObj within SAME context ];
[bSet addObject:bOjb];
}
[context insertObject:aObj];
[context save:&err];
这在单线程情况下或在双线程情况下使用一个NSManagedObjectContext跨两个线程(这绝对是坏的,但我只是在测试)中工作正常和花花公子。
但是,一旦我尝试为插入A& A的背景线程创建必要的第二个NSManagedObjectContext。 B对象,这种关系信息似乎不会持续存在。 A和B对象肯定存在,但它们之间没有关系。
以下是我创建第二个MOC的方法:
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[(AppDelegate*) [UIApplication sharedApplication].delegate persistentStoreCoordinator]];
请注意,我访问主线程中的Core Data,并将它们插入后台线程中。我在mergeChangesFromContextDidSaveNotification
的主线程上下文中使用了NSManagedObjectContextDidSaveNotification
,但似乎没有做任何事情。
更新
看起来这是我过早/不正当地发布MOC的问题。简单地评论一下这个问题就会导致这个问题消失,但是对于上下文的内存管理进行了一些改写,正确地修复了它。