使用核心数据在RestKit中搜索远程服务器

时间:2013-06-20 12:37:05

标签: ios objective-c core-data restkit

我有一个应用程序,它使用RestKit和一个用于Core Data的SQLite存储来与远程API对话。当我到达添加服务器端搜索的程度时,我面临着必须找到一种有效显示搜索结果的方法。为了实现这一点,我使用了一个NSFetchedResultsController,它绑定到与SQLite存储相同的模式的另一个内存存储,并且还支持RestKit。当RestKit搜索API的搜索端点时,它会将响应映射回内存存储区。

这非常适合我需要的东西,但现在又引起了另一个问题。当我从服务器返回这些“瞬态”对象,并且用户选择一个时,它需要在那时被复制到持久性存储中(超出该点的各种交互将从服务器加载其他对象并尝试将它们绑定原始对象 - 如果它们位于两个不同的对象上下文中,则会失败。)

TL;博士

有没有人对如何将整个对象(实体和关系)从一个核心数据存储复制到另一个核心数据存储有任何建议?或者,这甚至是必要的吗?有没有更简单的方法来使用RestKit完成同样的任务?

通过更改我的搜索而不是使用内存存储,我会更好吗?如果是这样,我应该如何存储这些对象?

1 个答案:

答案 0 :(得分:2)

我不会使用内存存储。我只是将搜索结果放入主商店并绕过复制问题。然后,我会进行清除,以清除不再需要的旧搜索结果。您可能希望标记由于某种原因需要保留的搜索结果。并且您可以让RestKit在执行每次新搜索时自动执行清除(请参阅these docs中的“获取请求块和删除孤立对象”)


关于你的另一个问题,关于标记。当您发出搜索请求时,搜索字词位于URL中。如果使用RKObjectManager和路由,则可以访问提供给映射的元数据以获取搜索项并将其存储到返回的对象中。类似的东西:

@"@metadata.routing.parameters.searchTerm": @"searchTerm",

请参阅元数据文档here