我NSManagedObjectContext在几个 UIViewControllers 中使用了一个 main 来显示数据(这是一个UITableView 带有列表的Department)
3 个实体,一个Department具有一对一到Boss一个对多到Employee(在这种情况下,employee具有一个NSData(这是一个图像)属性allow external storage)。
由于我正在批量导入图像,因此我在具有自己的后台线程中执行此操作NSManagedObjectContext。
导入包括创建Boss实体和所有Employee并设置关系。
现在我的问题是:
- 如果我使用其中的一个
child context进行main context导入和保存,那么即使两个上下文都没有更改,所有图像也会保留在内存中。 - 如果我使用
context with no relation to the main context图像并没有留在内存中,但新数据没有显示在中UIViewController(显然,因为main context没有通知由 所做的更改background context)
所以我希望在没有图像的情况下仍然显示更改(这意味着我想Department知道它有Boss关系但没有图像在内存中)。简而言之,我希望他们一旦context被保存就变成错误。
编辑:我认为问题在于,当我保存时child context,它main context会与...)
编辑2:我想我修好了,这就是我所做的:
- 我用了一个
child context绑到的main context,我听了所有的NSManagedObjectContextDidSaveNotification,insertedupdated我呼吁refreshObject:mergeChanges:它把它变成故障。
我注册了来自每个上下文的所有通知。
-(void)contextDidSave:(NSNotification*)saveNotification {
NSManagedObjectContext *defaultContext = saveNotification.object;
NSArray *insertedObjects = [saveNotification.userInfo valueForKey:@"inserted"];
if (insertedObject) {
NSLog(@"INSERTED : %@", insertedObjects);
for (NSManagedObject *object in insertedObjects) {
[defaultContext refreshObject:object mergeChanges:NO];
}
}
NSArray *updatedObjects = [saveNotification.userInfo valueForKey:@"updated"];
if (insertedObject) {
NSLog(@"UPDATED : %@", updatedObjects);
for (NSManagedObject *object in updatedObjects) {
[defaultContext refreshObject:object mergeChanges:NO];
}
}
}