我有以下结构
持久性商店< – >父背景< – > MOC(在主线程上)< – >后台线程MOC
(MOC =托管对象上下文)
所以即时通讯在背景环境中做一些工作
// Create a background context.
NSManagedObjectContext* context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.parentContext = self.document.managedObjectContext;
// Start using it, but in its own thread!
[context performBlock:^
{...
我从表中获取一些对象并在上下文中删除其中的一些对象.
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSArray* userQueryResults = [context executeFetchRequest:request error:&error];
for (int i = 0; i < userQueryResults.count; i++)
{
if(someCondition)
[context deleteObject:[userQueryResults objectAtIndex:bla];
}
现在,假设我想将剩余的用户重新添加到数组中……
它会重新获取原来在那里的所有用户还是仅重新获取未删除的用户?
如果我要保存我的“背景”会有什么不同吗?
基本上我试图理解使用嵌套上下文的提取和保存之间的区别……
谢谢
最佳答案 您可以通过设置 – [NSFetchRequest setIncludesPendingChanges]属性以两种方式重新获取用户.
默认值为YES.
如果值为NO,则获取请求将跳过检查未保存的更改,并仅返回与持久性存储中的谓词匹配的对象.
如果您保存子上下文,它只会将您的更改推送到父上下文.最后要查看持久存储中的更改,您需要保存父上下文.为此,您可以使用以下代码段:
[context performBlock:^{
NSError* error = nil;
[context save:&error];
[self.document.managedObjectContext performBlock:^{
NSError* parentError = nil;
[self.document.managedObjectContext save:&parentError];
}];
}];