在核心数据中删除数据库中的对象的策略。 [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/核心数据]的主要内容,如果未能解决你的问题,请参考以下文章