Iphone 理解核心数据中的嵌套上下文

Iphone 理解核心数据中的嵌套上下文,iphone,ios,objective-c,core-data,Iphone,Ios,Objective C,Core Data,我有以下结构 持久存储父上下文MOC(在主线程上)后台线程MOC (MOC=托管对象上下文) 所以我在后台做一些工作 // Create a background context. NSManagedObjectContext* context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; context.parentContext = self.document

我有以下结构

持久存储父上下文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*request=[NSFetchRequest fetchRequestWithEntityName:@“User”];
NSArray*userQueryResults=[context executeFetchRequest:请求错误:&错误];
for(int i=0;i
现在,假设我只想将剩余的用户重新蚀刻到一个数组中

它将重新蚀刻最初存在的所有用户,还是仅重新蚀刻未删除的用户

如果我要保存我的“上下文”,会有什么不同吗

基本上,我试图理解使用嵌套上下文进行获取和保存之间的区别


谢谢

您可以通过设置-[NSFetchRequest setIncludesPendingChanges]属性以两种方式重新蚀刻用户。 默认值为“是”。 如果该值为“否”,则获取请求将跳过检查未保存的更改,并仅返回与持久存储中的谓词匹配的对象

如果保存子上下文,它只会将您的更改推送到父上下文中。最后,要在持久性存储中查看您的更改,您需要保存父上下文。要做到这一点,您可以使用以下代码段:

[context performBlock:^{
    NSError* error = nil;
    [context save:&error];
    [self.document.managedObjectContext performBlock:^{
        NSError* parentError = nil;
        [self.document.managedObjectContext save:&parentError];
    }];
}];