iphone - 了解 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.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] 属性以两种方式重新获取用户。 默认值为是。 如果值为 NO,则获取请求将跳过检查未保存的更改,只返回与持久存储中的谓词匹配的对象。

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

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

关于iphone - 了解 Core Data 中的嵌套上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794289/

相关文章:

iphone - 替换为 view2 后删除 View 1

ios - 如何禁用或隐藏数字键盘类型的本地化?

ios - String is not identical to NSObject 错误,同时在 Swift 中应用约束(视觉约束)

objective-c - Cocoa 应用程序菜单栏不可点击

iphone - iOS - 如何删除应用程序窗口层次结构中的所有 ViewController?

ios - 在代码中使用通用 Int - 在 Core Data iOS 中使用 32 位或 64 位 Int?

iphone - 后台随机本地通知

iphone - iOS 如何隐藏之前的 subview

ios - AdMob、谷歌移动广告、从 iAd、bannerView 切换

objective-c - 从 UITextView 获取准确的光标位置