magicalrecord deleting non-imported data
想象一下CoreData中的以下关系
1 | Recipe < --- >> Ingredient |
我正在使用MagicalRecord定期使用本地CoreData数据库导入服务器数据库(JSON API)。
因此,如果我用
1 2 3 4 5 6 7 | { id:1, name:"Recipe 1", ingredients: [{ name: 'Ingredient 1' }] } |
因此,MagicalRecord创建了两个实体并将它们链接在一起。
当服务器更改为以下内容时,出现此问题:
1 2 3 4 5 6 7 | { id:1, name:"Recipe 1", ingredients: [{ name: 'Ingredient 2' <-- Notice here }] } |
MagicalRecord所做的是创建
问题是,在导入和删除对象时是否可以跟踪"已删除"的对象?
我已经按照以下步骤解决了这个问题。
对于任何给定请求,此方法均应实现所需的行为。请注意,您仍然可能会删除其他地方引用的记录,因此,仅当可以由其他将来的请求重新创建它们时,才使用此方法。
导入代码
1 2 3 4 5 6 7 | NSArray *existingObjectIDs = [self existingObjectIDsForYourQuery]; [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { [Recipe MR_importFromObject:response inContext:localContext]; NSArray *objectIDs = [[[localContext updatedObjects] allObjects] valueForKey:@"objectID"]; [self deleteLocalObjectsWithObjectIDs:existingObjectIDs excludingImportedObjectIDs:objectIDs]; }]; |
删除代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | - (void)deleteLocalObjectsWithObjectIDs:(NSArray *)existingObjectIDs excludingImportedObjectIDs:(NSArray *)importedObjectIDs { NSMutableArray *objectsToDelete = [NSMutableArray arrayWithArray:existingObjectIDs]; for ( NSManagedObjectID *objectID in importedObjectIDs ) { [objectsToDelete removeObject:objectID]; } [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) { for ( NSManagedObjectID *objectID in objectsToDelete ) { NSManagedObject *object = [localContext existingObjectWithID:objectID error:nil]; if ( object ) { [localContext deleteObject:object]; } } }]; } |
这里的真正问题是MagicalRecord似乎正在导入重复项。这个问题应该在最近的更新中已经解决,但是,如果您仍然遇到问题,建议您在项目问题页面上打开工单
如果这是用作主键的服务器,则不能仅更改服务器上的
请考虑以下内容:
您的
您可以通过进入核心数据模型并选择
接下来进入您的
您可以在此处阅读更多信息:http://www.cimgf.com/2012/05/29/importing-data-made-easy/,特别是"与按键有关"部分。
同样,如上所述,
您仅更新了名称,这意味着您可能应该删除当前
如果仍然有问题,建议您在