我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
,inserted
updated
我呼吁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];
}
}
}