glu*_*ued 5 core-data ios magicalrecord
处理孤儿是否有任何内置于魔法记录中的东西?例如,如果我加载以下JSON数据...
[
{ "_id" : "b1", "name" : "brandA"},
{ "_id" : "b2", "name" : "brandB"},
{ "_id" : "b3", "name" : "brandC"}
]
Run Code Online (Sandbox Code Playgroud)
然后数据得到更新brandC并被删除
[
{ "_id" : "b1", "name" : "brandA"},
{ "_id" : "b2", "name" : "brandB"}
]
Run Code Online (Sandbox Code Playgroud)
更重要的是,如何删除孤立的嵌套对象,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" }
]
}
]
Run Code Online (Sandbox Code Playgroud)
想出来,但如果有人想用更好的解决方案,请这样做.
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];
Run Code Online (Sandbox Code Playgroud)
-(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];
}
Run Code Online (Sandbox Code Playgroud)
在品牌实体中willImport我们正在搜索与新数据不匹配的产品ID并将其删除.