添加到关系后在coredata中找不到对象

布鲁诺巴萨斯

添加关系后,获取对象时出现问题。我第一次获取该类别时,总是会找到,然后当我添加到关系中时,找不到以下类别。

关系是一个Many-To-Many

例子:

  • 提取类别 categoryId = 10
  • 找到类别对象
  • 添加到父对象关系
  • 下一个对象
  • 如果几个类别具有相同的id,则categoryId = 10找不到

    NSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    
       [private setParentContext:self.model.context];
        __block NSError *error = nil;
    
        [private performBlockAndWait:^{
    
            GPDeal *deal = [EKManagedObjectMapper objectFromExternalRepresentation:dic withMapping:[GPDeal objectMapping] inManagedObjectContext:private];
            for (NSDictionary *dic in responseObject[@"response"]) {
    
                GPCategory *category;
    
               //The first time always found
                if ((category = [GPCategory MR_findFirstByAttribute:@"catId" withValue:dic[@"mainAttribute"] inContext:private])) {
                    NSLog(@"Found");
                    [category addDealsObject:deal];
    
                } else {
                    NSLog(@"Not Found");
    
                }
    
            }
        }];
    
        NSError *PrivateError = nil;
        if (![private save:&PrivateError]) {
            NSLog(@"Unresolved error %@, %@", PrivateError, [PrivateError userInfo]);
            abort();
        }
    
        if (!error) {
            //Save on main moc
            [self.model saveWithErrorBlock:^(BOOL success, NSError *error) {
                if (!success) {
                    NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
                }
            }];
    
        } else {
            NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
        }
    

编辑:

解决了,我想我的问题是我忘了在每次迭代结束时保存主要上下文。

        NSManagedObjectContext *backgroundMOC = [self.model backgroundMOC:self.model.context];

        [backgroundMOC performBlockAndWait:^{

            for (NSDictionary *dic in responseObject[@"response"]) {

                GPDeal *deal = [EKManagedObjectMapper objectFromExternalRepresentation:dic withMapping:[GPDeal objectMapping] inManagedObjectContext:backgroundMOC];

                GPCategory *category;
                if ((category = [GPCategory MR_findFirstByAttribute:@"catId" withValue:dic[@"mainAttribute"] inContext:backgroundMOC])) {
                    NSLog(@"Found with mainAttribute %@", dic[@"mainAttribute"]);
                    [deal addDealCategoryObject:category];
                }

                if([backgroundMOC hasChanges]) {
                    NSError * error;
                    [backgroundMOC save:&error];

                    [self.model.context performBlockAndWait:^{
                        if([self.model.context hasChanges]) {
                            NSError * error;
                            [self.model.context save:&error];
                        }
                    }];
                }
            }
        }];
迅捷建筑师

您可能没有保存MOC链。为了清楚起见,我将关键字private替换为变量name backgroundMOC

在上述问题上,我只能假设该行在NSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 技术上类似于:

- (NSManagedObjectContext *)backgroundMOC:(NSManagedObjectContext *)mainMOC
{
    NSManagedObjectContext * threadManagedObjectContext = [[NSManagedObjectContext alloc]
                             initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [threadManagedObjectContext setParentContext:mainMOC];
    [threadManagedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
    return threadManagedObjectContext;
}

self.model.context作为mainMOC传递,带有self.model.contextsetMergePolicy
同样,我必须假定这self.model saveWithErrorBlock在技​​术上与:

[mainMOC performBlockAndWait:^{
    if([mainMOC hasChanges]) {
        NSError * error;
        [mainMOC save:&error];
        // handle error
    }
}];

如果是这样,应该对backgroundMOC(您的private参考资料)说同样的话

[backgroundMOC performBlockAndWait:^{
    if([backgroundMOC hasChanges]) {
        NSError * error;
        [backgroundMOC save:&error];
        // handle error
    }
}];

换句话说,你要确保你backgroundMOCmainMOC保存操作时从各自的线程上执行,与performBlockAndWait

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ubuntu中的“添加到列表:找不到命令”

来自分类Dev

在mongoose中的子文档mongodb中将对象添加到数组中。找不到属性“消息”

来自分类Dev

比较两个带有键的对象数组,如果找不到,则将其添加到数组中

来自分类Dev

错误:将Sugar ORM添加到项目后找不到符号方法getColor(Context,int)

来自分类Dev

将 Composer bin 目录添加到 PATH 后找不到 Laravel 命令

来自分类Dev

在选择项中找不到模型值时,将类别添加到输入中

来自分类Dev

在SQLAlchemey中,可以将新对象添加到关系对象吗?

来自分类Dev

批次:移动-找不到指定的路径(将bat添加到启动中)

来自分类Dev

[GWT]为什么找不到已添加到CSS布局容器中的小部件?

来自分类Dev

找不到方法:使用MVC httppost将行添加到Azure表存储中

来自分类Dev

javascript如何在创建对象后将新对象添加到对象中

来自分类Dev

如果找不到,则添加到收藏夹

来自分类Dev

findChild找不到仅添加到QMenuBar的菜单

来自分类Dev

找不到添加到路径的命令-sail_align

来自分类Dev

Manage.py 添加到 PYTHONPATH,但是找不到

来自分类Dev

Laravel多对多关系,是否将更多对象添加到“数据透视”中?

来自分类Dev

将对象添加到一对多关系ROR

来自分类Dev

将对象添加到一对多关系ROR

来自分类Dev

将对象添加到区域设置或SimpleUniverse后,将对象添加到BranchGroup

来自分类Dev

无法添加到ArrayList中的对象

来自分类Dev

无法添加到ArrayList中的对象

来自分类Dev

在Google Cloud Store中创建对象后添加到用户元数据

来自分类Dev

for循环后,未知引号添加到NSMutableArray中的字符串对象

来自分类Dev

Laravel 5 Dingo API,将多个转换后的对象添加到响应中

来自分类Dev

该信号如何添加到Alloy中的关系中?

来自分类Dev

将控件添加到C#2015中,找不到this.Controls.Add(bla)方法吗?

来自分类Dev

将产品添加到Rails应用程序中的购物车时,找不到带有'id'=的产品

来自分类Dev

我试图在单击时将JPanel添加到我的JFrame中,但是我找不到我的错误

来自分类Dev

InvalidOperationException:找不到实体类型'PassengerViewModel'。确保已将实体类型添加到模型中

Related 相关文章

  1. 1

    ubuntu中的“添加到列表:找不到命令”

  2. 2

    在mongoose中的子文档mongodb中将对象添加到数组中。找不到属性“消息”

  3. 3

    比较两个带有键的对象数组,如果找不到,则将其添加到数组中

  4. 4

    错误:将Sugar ORM添加到项目后找不到符号方法getColor(Context,int)

  5. 5

    将 Composer bin 目录添加到 PATH 后找不到 Laravel 命令

  6. 6

    在选择项中找不到模型值时,将类别添加到输入中

  7. 7

    在SQLAlchemey中,可以将新对象添加到关系对象吗?

  8. 8

    批次:移动-找不到指定的路径(将bat添加到启动中)

  9. 9

    [GWT]为什么找不到已添加到CSS布局容器中的小部件?

  10. 10

    找不到方法:使用MVC httppost将行添加到Azure表存储中

  11. 11

    javascript如何在创建对象后将新对象添加到对象中

  12. 12

    如果找不到,则添加到收藏夹

  13. 13

    findChild找不到仅添加到QMenuBar的菜单

  14. 14

    找不到添加到路径的命令-sail_align

  15. 15

    Manage.py 添加到 PYTHONPATH,但是找不到

  16. 16

    Laravel多对多关系,是否将更多对象添加到“数据透视”中?

  17. 17

    将对象添加到一对多关系ROR

  18. 18

    将对象添加到一对多关系ROR

  19. 19

    将对象添加到区域设置或SimpleUniverse后,将对象添加到BranchGroup

  20. 20

    无法添加到ArrayList中的对象

  21. 21

    无法添加到ArrayList中的对象

  22. 22

    在Google Cloud Store中创建对象后添加到用户元数据

  23. 23

    for循环后,未知引号添加到NSMutableArray中的字符串对象

  24. 24

    Laravel 5 Dingo API,将多个转换后的对象添加到响应中

  25. 25

    该信号如何添加到Alloy中的关系中?

  26. 26

    将控件添加到C#2015中,找不到this.Controls.Add(bla)方法吗?

  27. 27

    将产品添加到Rails应用程序中的购物车时,找不到带有'id'=的产品

  28. 28

    我试图在单击时将JPanel添加到我的JFrame中,但是我找不到我的错误

  29. 29

    InvalidOperationException:找不到实体类型'PassengerViewModel'。确保已将实体类型添加到模型中

热门标签

归档