【问题标题】:Remove orphaned objects on magical record import删除魔法记录导入时的孤立对象
【发布时间】:2014-08-06 15:24:39
【问题描述】:

magicrecord 中有内置的东西来处理孤儿吗?例如,如果我加载以下 JSON 数据...

[
  { "_id"   : "b1", "name"  : "brandA"},
  { "_id"   : "b2", "name"  : "brandB"},
  { "_id"   : "b3", "name"  : "brandC"}
]

然后数据被更新,brandC 被删除

[
  { "_id"   : "b1", "name"  : "brandA"},
  { "_id"   : "b2", "name"  : "brandB"}
]

更重要的是,如何删除孤立的嵌套对象,例如下面的productB

[
  { "_id"   : "b1", 
    "name"  : "brandA"
    "products" : [
        {"_id" : "p1", "name" : "productA" },
        {"_id" : "p2", "name" : "productB" }
     ]
  },
  { "_id"   : "b2", 
    "name"  : "brandB"
    "products" : [
        {"_id" : "p3", "name" : "productC" },
        {"_id" : "p4", "name" : "productD" }
     ]
  }
]

【问题讨论】:

    标签: ios core-data magicalrecord


    【解决方案1】:

    想通了,但如果有人想提出更好的解决方案,请这样做。

    在加载时移除“Level 0”上的孤儿

    NSArray *newdata   =  [];//AN ARRAY OF NEW DATA
    NSArray *idList         = [newdata valueForKey:@"_id"];
    NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"NOT(_id IN %@)", idList];
    [MRBrand MR_deleteAllMatchingPredicate:predicate];
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
    

    删除托管对象内“级别 1”上的嵌套孤儿

    -(void)willImport:(id)data{
        NSArray *idList         = [data[@"products"] valueForKey:@"_id"];
        NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"NOT(pid IN %@) AND brand.bid == %@", idList, self.bid];
        [Product MR_deleteAllMatchingPredicate:predicate inContext:self.managedObjectContext];
    }
    

    willImport 中的品牌实体上,我们正在搜索与新数据不匹配的产品 ID 并将其删除。

    【讨论】:

    • 我只是用它。您的解决方案效果很好。感谢您分享它。这非常重要,因为我认为它是唯一一个做得很好的代码示例。再次感谢您
    • 如果可以的话,我会给你 100+。非常简洁的解决方案,感谢分享。
    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多