RestKit 0.20 和 ManagedObjectContexts

Posted

技术标签:

【中文标题】RestKit 0.20 和 ManagedObjectContexts【英文标题】:RestKit 0.20 and ManagedObjectContexts 【发布时间】:2014-01-08 13:53:26 【问题描述】:

我正在使用 RestKit 0.20 将数据映射到核心数据并在 UITable 中显示。我正在将数据(一个“活动”对象)写入 mainQueue 的 ManagedObjectContext 并且一切正常。现在我需要第二张带有 Future-Activity 的表格,以及第三张带有 Past-Activity 的表格。由于排序是在服务器端完成的,因此我需要为每个表创建一个 ManagedObjectContext。我该如何处理并拥有持久数据。我需要使用“newChildManagedObjectContextWithConcurrencyType”吗?

【问题讨论】:

您不需要为此使用不同的上下文(实际上是持久存储)。您需要一些方法来标记您的 Activity 对象,以便您知道它们的用途。您收到的 JSON 是什么?你可以使用一些请求元数据吗? 我为每种情况(全部、未来或过去)使用不同的 Url 参数,因此有效负载完全符合我的需要并按 asc/desc 排序。但是如果我显示过去的活动然后点击未来按钮,我必须等待新的有效负载来显示未来的活动。如果我已经将数据保存在持久存储中,并且它没有更改,那么用户甚至根本不会注意到任何延迟。如果可能的话,这就是我的目标。 为了回答您的问题,Json 具有以下字段:“all_day”“start_time”“end_time”,因此我可以使用它们来显示数据,直到有效负载到达。 您不能简单地获取“所有”活动,将它们保存到商店,然后使用谓词将它们分隔到您的类别吗? 我能做到。因为我也在分页,所以我必须处理谓词和分页。因此,如果我在所有活动上分页了 2 页,切换到未来活动,那么当我收到带有未来活动的新有效负载时,我必须清除 ManagedObject。如果我然后切换回所有活动,我会丢失之前的 2 页。当服务器准确地提供我需要的东西时,似乎我必须涵盖许多角度。 【参考方案1】:

保留一个商店。使用谓词过滤掉您想要的项目。

如果您可以下载所有数据(并且您很乐意这样做,即使其中一些数据可能不会被用户使用),并且您可以标记它们的用途,那么这是一个选项.

从 RestKit 的角度来看,您可以在映射过程中使用元数据来标记项目,以便您知道应该如何使用它们(然后对其进行过滤)。这需要您向该项目添加一个新键 - 但是,如果一个项目可以在所有响应中,这将是有问题的,因为这些值将被覆盖。

要使用元数据,只需添加一个新映射,例如:

@"@metadata.URL": @"requestURL"

@metadata.URL 是用于发出请求的 URL,requestURL 是您的实体上可用于过滤的属性。谓词将检查 contains 您的类型(“all_day”“start_time”“end_time”)。

【讨论】:

我会接受这个答案。每个项目都可以从它的 URL 中过滤出来,包括未来和过去。更多我不必做。但是如何为 RKPaginator 发送@metadata.URL?我看到的示例使用 RKMappingOperation,那么如何连接它们? 你没有。元数据可用于映射。分页创建 URL。 我一定遗漏了一些东西:我在我的 Activitiy 实体和 @"@metadata.URL": @"requestURL" 中添加了一个字符串属性 'requestURL' 到我的 RKEntityMapping。但是 requestURL 是 nil 并且没有映射。日志输出为:没有找到可映射的属性值 keypath '@metadata.URL' 您已将其添加到响应映射中,是吗?这是我们在处理响应时获取额外信息的地方(分页器用于请求)。 通过将 @"@metadata.URL" 更改为 @'@metadata.HTTP.request.URL.absoluteString' 使其工作,因为我在 Github 上的 RestKit 问题下的崩溃报告中看到了这一点。我猜是我的侥幸......

以上是关于RestKit 0.20 和 ManagedObjectContexts的主要内容,如果未能解决你的问题,请参考以下文章

从 RestKit 0.10 更新到 0.20

RestKit 0.20 无法从服务器获取数据

无法让 Restkit 0.20 + CoreData 工作

RestKit 0.20:映射复杂的动态嵌套 JSON

Restkit 0.20:处理到抽象实体的映射

RestKit 0.20 映射问题