• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 核心数据设置多个 managedObjectContexts

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:00:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我正在开发的应用程序中,我需要同时访问和写入 Core Data。我已经能够收集到这意味着我需要使用多个 managedObjectContexts,但我不明白我应该如何设置这两个 managedObjectContexts。

我知道,一旦我设置好它们,我需要在后台线程上对其 managedObjectContext 执行写操作,然后通过如下操作合并数据:Core Data and threads / Grand Central Dispatch .

所以我的问题是,我将如何启动两个单独的 managedObjectContexts 以便我可以按照描述使用它们?



Best Answer-推荐答案


您必须像这样使用相同的 NSPersistentStoreCoordinator 创建两个单独的 NSManagedObjectContexts

首先在你的模型类中创建两个 NSManagedObjectContexts 名称分别为 backgroundManagedObjectContextmainBackgroundManagedObjectContext

+ (NSManagedObjectContext *)backgroundManagedObjectContext
    {
        static NSManagedObjectContext * backgroundManagedObjectContext;
        if(backgroundManagedObjectContext != nil){
            return backgroundManagedObjectContext;
        }
        @try {
            NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
            if (coordinator != nil) {
                backgroundManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
                [backgroundManagedObjectContext setPersistentStoreCoordinator: [self persistentStoreCOordinator]];
            }
        }
        @catch (NSException *exception) {
            NSLog(@"Exception occur %@",exception);
        }
        return backgroundManagedObjectContext;

    }

那么两者都需要获得相同的 persistentStoreCoordinator 然后需要将您的 backgroungManagedObjectContext 合并到 mainBackgroundManagedObjectContext,这样每当您像这样将数据保存到 backgroundManageObjectContext 时都会创建 NSNotification

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selectorselector(contextDidSave
                                                 name:NSManagedObjectContextDidSaveNotification
                                               object:nil];

那么你必须实现这个通知方法来更新你的 mainManagedObjectContext 像这样

- (void)contextDidSaveNSNotification *)notification
    {
        SEL selector = @selector(mergeChangesFromContextDidSaveNotification;
        [[self mainManagedObjectContext] performSelectorOnMainThread:selector withObject:notification waitUntilDone:YES];

    }

关于ios - 核心数据设置多个 managedObjectContexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107822/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap