【问题标题】:Understanding nested contexts in Core Data理解 Core Data 中的嵌套上下文
【发布时间】:2013-02-10 03:06:08
【问题描述】:

我有以下结构

持久存储 父上下文 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];
}

现在,假设我只想将剩余的用户重新提取到一个数组中......

它会重新获取所有原来存在的用户还是只重新获取未删除的用户?

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

基本上,我试图了解嵌套上下文中获取和保存之间的区别...

谢谢

【问题讨论】:

    标签: iphone ios objective-c core-data


    【解决方案1】:

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

    如果您保存子上下文,它只会将您的更改推送到父上下文。最后,要查看持久存储中的更改,您需要保存父上下文。为此,您可以使用以下代码 sn-p :

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      相关资源
      最近更新 更多