如何确保数据一致性并真正利用核心数据?

时间:2014-08-29 21:06:54

标签: ios core-data

我曾经在多个iOS应用上工作过,其中一些使用了核心数据,其中一些还没有。虽然我认为自己对核心数据有一些基本的了解,但总有一些东西让我怀疑它的用处。我已经就这个主题做了很多阅读,而普遍的共识似乎是使用它的好处超过了缺点。我最近提交了一个不使用Core Data的应用程序,并且总是计划在我有时间进行一些优化工作时返回更新项目以利用它。现在是时候了,但我想知道我工作的应用程序是否合理,也许我一直没有正确使用它。请告知并指出我缺少的东西。

我正在开发的项目是一个社交网络应用程序,它也有一个前端站点。我们有标准功能,如新闻源,活动列表,关注/取消关注某人的能力,以及在用户位置使用POI的地图。目前,我们在从服务器请求数据时根据需要使用分页。

我对Core Data为何如此出色的理解:

  • 更容易管理关系复杂的数据
  • 无需传递数据即可轻松访问数据
  • 更容易操作,获取和排序数据
  • 更好的内存利用率
  • 通过预加载本地存储的数据来提高感知性能,直到收到最新数据

我遇到的问题是,因为我在请求数据时使用分页而不是一次请求所有数据。本地存储的数据只是数据库中当前状态的一个子集。让我们以新闻源为例。如果我执行以下操作,则会导致一些问题:

  • 用户手动刷新新闻源 - >控制器通知模型它需要最新的20项 - >模拟对新闻源中最新20个项目的请求,并将它们保存为NSManagedObject - >模型通知控制器数据已准备好 - >获取最新的20个项目以在UITableView中显示

如果用户A刷新新闻源,请为应用程序添加背景,然后用户B在新闻源中删除他的帖子(假设它是第10项),然后用户A再次前景应用程序以刷新新闻源。在用户A的新闻源中,B的帖子仍然会在那里,因为根据createdAt属性,它确实是最新的20个项目之一。

要解决这个问题,我可以考虑一些解决方案:

  1. 在项目中添加一个标记,表示已将其删除
  2. 新数据到达时始终丢弃本地数据
  3. 禁用分页
  4. 不使用上述工作流程,而是始终仅显示请求的数据,而不是提取最新的
  5. 解决方案1意味着需要自定义代码来处理不同的客户端,因为浏览器不需要删除项目,但iOS客户端需要。但是,即使它可以工作,它也可能会破坏分页机制,并可能导致客户端出现奇怪的行为。例如,如果删除了大量项目,则最新的20个项目将仅包含一些项目,这些项目将在用户刷新时实际显示在客户端上的新闻源中。随着用户关注更多人,他的新闻源中也会插入更多故事。在这种情况下,这种解决方案不能很好地发挥作用。

    解决方案2首先完全违背了使用Core Data的目的,除非我遗漏了一些东西。

    解决方案3表示客户端始终需要请求所有数据。这几乎是不可能的,因为当您获得更多数据时,检索和处理它们的时间将使应用程序变得缓慢且无响应。从技术和用户体验的角度来看,它也没有意义。

    解决方案4也有点失败了使用Core Data的目的,因为当我们只在内存中存储数据时,它是相同的工作流程。您仍然可以获取和查找对象,但在访问时它们可能在服务器上无效。

    我错过了什么吗?如何在这种情况下使用核心数据?当客户端没有所有数据时,您如何确保数据一致性?提前谢谢你。

0 个答案:

没有答案