NSManagedObject 的 NSMergeConflict 与单个 ManagedObjectContext

Posted

技术标签:

【中文标题】NSManagedObject 的 NSMergeConflict 与单个 ManagedObjectContext【英文标题】:NSMergeConflict for NSManagedObject with single ManagedObjectContext 【发布时间】:2013-10-18 07:21:28 【问题描述】:

我正在使用 coreData,我在文件夹和文件之间有一对多的关系。

我在整个应用程序中只使用了一个 MOC。我只是将它传递给不同的

viewControllers ,执行添加、编辑、删除和保存等操作。

我的 rootViewController 使用 NSfetchResultsController,我使用它创建文件夹,保存并显示在我的桌子上。

保存我是这样做的

        NSError *error;
        if (![self.managedObjectContext save:&error]) 
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        

然后每当我选择一个文件夹时,我打开一个文件 ViewController,在打开时,我通过这种方式将 MOC 传递给文件 VC

         FileViewController *file = [[FileViewController alloc] initWithNibName:@"FileViewController" bundle:nil];

        file.managedObjectContext = self.managedObjectContext;
        file.controller = self.controller;

然后我在 FileVC 中创建一个文件并再次将它保存在 FileVC 中,这样

        NSError *error;
        if (![self.managedObjectContext save:&error]) 
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        

通过这样做,我是使用两个 MOC 还是一个 MOC?

在我的 appdelegate.m 中,我也试过这个

self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

            _navigationController = [[UINavigationController alloc] initWithRootViewController:self.rootViewController];
            [self.managedObjectContext setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];

            self.rootViewController.managedObjectContext = self.managedObjectContext;

有时当我在文件夹中添加文件时,我会收到“NSManagedObject 的 NSMergeConflict”

请帮忙

问候 兰吉特。

【问题讨论】:

朋友们好,请帮帮我 a) 你如何创建 MOM,b) 错误说明了什么,c) 你是多线程的吗? 【参考方案1】:

我很确定您只使用了一个托管对象上下文。您必须创建第二个才能使用第二个。虽然即使我是对的,但我对 NSMergeConflict 没有任何评论,因为我现在正在自己处理这个问题。

【讨论】:

以上是关于NSManagedObject 的 NSMergeConflict 与单个 ManagedObjectContext的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObject 故障/无法获得由 NSManagedObject 处理的“原始”对象

NSManagedObject - NSSet 被删除?

属性作为“当前 NSManagedObject”的视图控制器中的 NSManagedObject

如何根据现有的 NSManagedObject 值在 NSManagedObject 派生类中设置默认值?

创建新的 NSManagedObject 并将其分配给新的 NSManagedObject *有时*会失败

将一个 NSManagedObject 用于 UITableView 部分,它与另一个 NSManagedObject 的关系用于行?