在核心数据中删除数据库中的对象的策略。 [RestKit/核心数据]

Posted

技术标签:

【中文标题】在核心数据中删除数据库中的对象的策略。 [RestKit/核心数据]【英文标题】:Strategy to have deleted objects in DB deleted in Core Data as well. [RestKit/Core Data] 【发布时间】:2013-09-03 12:12:57 【问题描述】:

我在我的应用程序之上运行了一个 REST 服务,它将数据返回到我的 iPad 应用程序。这个应用程序是使用 RestKit 构建的,用于在 iPad 内外同步数据。然而,我也有一个 webapp 正在运行,它允许用户删除一些数据。

我现在遇到的当前问题是,每当用户登录 iPad 应用程序时,我都会运行查询以获取自上次登录以来最后一次修改/添加的数据。这使我可以进行更快/更短的查询。唯一的问题是,例如,如果在他最近两次登录之间从数据库中删除了一个对象,用户仍然会在他的 iPad 中看到它。

我应该采用什么策略来删除 Core Data 中的这些数据?我是否应该从我的数据库中删除对象,而是使用一个 BOOL 表示“已删除”或没有,并且每当我通过 REST 获取 last_modified 数据时,该项目就会出现,我会将其过滤掉在 iPad 上?

我知道 RestKit 有一种删除孤立对象的方法,但由于我正在同步“last_modified”数据,我认为它不能在这里应用。

【问题讨论】:

响应是否包含您希望在数据库中的所有对象(应删除响应中未包含的所有对象)? 这就是问题所在。响应包含自用户上次登录以来添加/更新的对象。因此,例如,如果对象 1 在 Core Data 中(id==1),但自用户上次登录以来它的名称发生了变化,它将在响应中。如果它已经改变,它不会是。如果删除了,谁知道?! 那么服务器应该真正维护一个删除列表并用一个标志发送这些对象。 完美。我可能会采用相同的策略...只是有一个已删除对象的列表,带有“deletion_date”字段,每当我获取最新对象时,我都会获取“最新”删除。 我创建了一个需要从 CoreData 中删除的对象列表。因此,例如,我返回一个 IDS 数组,该数组对应于我需要在 CoreData 中删除的用户。我怎样才能用 RestKit 做这样的映射?! 【参考方案1】:

来自您的评论问题:

我创建了一个需要从 CoreData 中删除的对象列表。因此,例如,我返回一个 IDS 数组,该数组对应于我需要在 CoreData 中删除的用户。我怎样才能用 RestKit 做这样的映射?!

您应该创建到NSMutableArray 的映射。如果您的源数据是字符串的 JSON 数组,那么您将需要使用 nil 键路径映射,以便将字符串提取到目标数组中。见this link。

【讨论】:

好的好的。但是我可以让 RestKit 尝试删除具有刚刚映射的 ID 的对象吗?我应该循环遍历映射的 NSArray 并自己删除它还是..? 我认为您需要自己删除它们。 RestKits 删除方法不是为您的用例设计的。您也许可以通过删除获取请求来做一些事情,但我认为这是人为的。【参考方案2】:

正如 Wain 所建议的,我将在数据库中拥有一个带有“deleted_date”字段的已删除对象列表。每当我要获取最新的对象时,我也会将最新删除的对象取回来。

【讨论】:

以上是关于在核心数据中删除数据库中的对象的策略。 [RestKit/核心数据]的主要内容,如果未能解决你的问题,请参考以下文章

REST API 中的数据新鲜度策略

核心数据:如何删除不在新数据中的对象

删除核心数据对象并保存在后台线程中

XCode - 删除核心数据中的相关对象

更改未保存在核心数据模型中(例如删除对象)

删除核心数据对象和表格单元