MagicalRecord:后台导入数据,访问刚导入的数据

Posted

技术标签:

【中文标题】MagicalRecord:后台导入数据,访问刚导入的数据【英文标题】:MagicalRecord: Import data in the background and access just imported data 【发布时间】:2014-05-28 15:06:31 【问题描述】:

使用 MagicalRecord 在后台导入数据并在完成时访问刚刚导入的数据的适当方式是什么?我是否必须手动保存所有导入数据的主键并将其传递给完成块才能再次从 CoreData 中找到它们?

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext)

    NSArray *importedEntitiesArray = [MyEntity MR_importFromArray:bigResultsArray
                       inContext:localContext];
 completion:^(BOOL success, NSError *error)

    // How to access the imported entities from here?
    // Note we no longer have access to the saving localContext
    // so the entities in importedEntitiesArray would be invalid
]

我意识到我可以做到以下几点:

NSArray *importedEntitiesArray = [MyEntity MR_importFromArray:bigResultsArray];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

但这不会在后台导入数据。

【问题讨论】:

您想立即访问多少数据?您不想使用某些谓词进行批量提取吗? 理想情况下是所有刚获取的数据。这样做的原因是 API 知道根据服务器参数返回哪些实体,但是 CoreData 实体没有让我通过 fetch 谓词来计算它的属性(嗯,他们有,但它需要一些数据构建,我想知道是否可以避免构建这些数据)。 【参考方案1】:

要将所有新后台加载的托管对象转移到另一个上下文,您需要在后台加载完成后获取所有托管对象 ID,然后从另一个上下文请求所有对象的这些 ID。无论您认为什么是主键都行不通,它必须是托管对象 ID。您还需要将新加载的对象保存到持久存储(并根据您拥有的子/父关系刷新上下文),以便它们在其他上下文中可用。

【讨论】:

以上是关于MagicalRecord:后台导入数据,访问刚导入的数据的主要内容,如果未能解决你的问题,请参考以下文章

带有 UITableView 示例的 MagicalRecord

使用 MagicalRecord 导入数据

多态关系的 MagicalRecord 导入

已经存在的 NSManagedObject 的 MagicalRecord 导入数据

如何在不阻塞 UI 的情况下正确使用 MagicalRecord 从 Web 服务导入数据

MagicalRecord:如何将值导入相关实体