在iOS上处理不稳定数据的最佳方法

时间:2014-02-14 17:41:43

标签: ios database

我正在开发一个与数据库连接的应用程序。数据库包含300MB到4GB的数据,因为每个客户都有自己的数据库。我的问题是收集数据,因为可能的数据库大小,只能在本地下载和存储信息。数据可能变得非常复杂并且可能会有所不同。举个例子:

客户有一个Job,他们想从应用程序中搜索该作业。 然后,我获取符合搜索条件的作业列表。 客户看到他们想要查看的工作,然后开始收集过程。

此作业可能会触及许多表格,有时会反复发生..

有一个作业表,一个映射到一个人的关系表。然后是另一个包含非客户关系信息的表,然后有与该作业关联的日历事件,这些日历事件可以关联不同的人。然后会有附加到作业的电子邮件,这反过来可以带来更多的人和事件。

所以我有一个工作模型,收集所有这些信息。我遇到的问题是,我无法找到一种很好的方法来发信号通知我的数据是完全下载的。我最初的想法是使用NotificationCenter在任务的某些部分完成时发送消息,允许核心Job对象在一切都完成时通知视图。

我知道这是一个非常普遍的问题,但我真的很难过如何获取未知数量的表格结果并将其转换为我的应用程序实际可以使用的通知。

2 个答案:

答案 0 :(得分:1)

我最初的建议是核心数据。它专为此类问题而设计。不,我不是说将整个数据库下载到Core Data中。我说要使用Core Data来管理你的对象模型,因为这是它擅长的。

当您从服务器接收数据时,将其组合成NSManagedObjects并将它们粘贴到数据存储中。在UI端,创建一个NSFetchedResultsController,以便在异步时通知您数据更新。你不一定需要坚持这个商店。您可以将它保存在内存中,并在完成查询时将其丢弃,但将其保留在磁盘上可能是一个很好的缓存解决方案。同样,不要将Core Data视为“本地数据库”。可以将其视为可以查询对象的模型持久性引擎。

此模型的一个优点是,您可以在用户可用时向用户提供最佳可用数据。但是说你真的不想得到这些信息,直到它全部可用。那也没关系。只需让网络端不断更新其上下文,然后只在一切完成后保存。这样NSFetchedResultsController获得单个原子更新。 Core Data的优点在于它内置了这些概念,因此您无需大量重新设计即可调整更新策略。

答案 1 :(得分:0)

通知中心对此非常有用。

在数据加载的逻辑点发布通知,以触发用户的UI更新。

相关问题