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

在iOS上处理不稳定数据的最佳方法,ios,database,Ios,Database,我正在开发一个连接到数据库的应用程序。该数据库包含300MB到4GB的数据,因为每个客户都有自己的数据库。我的问题是收集数据,因为潜在的数据库大小,仅仅下载和存储本地信息是不可能的。数据可能变得相当复杂,并且可能会有所不同。例如: 客户有一份工作,他们希望从应用程序中搜索该工作。 然后,我获取与搜索条件匹配的作业列表。 客户看到他们想要查看的作业,我开始收集过程 这项工作可能会涉及许多桌子,有时会重复 有一个jobs表,一个映射到个人的关系表。然后是另一个包含非客户关系信息的表,然后是与作业关联

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

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

这项工作可能会涉及许多桌子,有时会重复

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

所以我有一个收集所有这些信息的工作模型。我所面临的问题是,我无法找到一个好方法来表明我的观点,即数据已完全下载。我最初的想法是使用NotificationCenter在任务的某些部分完成时发送消息,允许核心作业对象在所有事情完成时通知视图


我知道这是一个相当普遍的问题,但我真的很困惑,如何将未知数量的表格结果转化为我的应用程序可以实际使用的通知。

通知中心将为此发挥巨大作用


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

我最初的建议是核心数据。它是为这种问题设计的。不,我不是说把整个数据库下载到核心数据中。我说的是使用核心数据来管理对象模型,因为这正是它擅长的

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


此模型的一个优点是,您可以在数据可用时向用户提供最佳可用数据。但是,如果你真的不想得到这些信息,直到它们全部可用。那也很好。只要让网络端不断更新它的上下文,然后只在一切都完成后保存它。这样,NSFetchedResultsController就可以获得单个原子更新。核心数据的好处在于它内置了这些概念,因此您可以调整更新策略,而无需大规模重新设计。

这是一个棘手的问题,没有简单的答案。不管怎样,你都必须记录下你所要求的但尚未收到的一切。我有一个类似复杂的应用程序,但框架肯定与你的完全不同,所以我只能给出一般性的建议。我建议把所有内容都写在纸上。所有视图控制器,它们的数据,如何从屏幕A到屏幕B等等。一旦你在纸上有了一个精确的图表表示,你就可以一步一步地开始在编程方面工作。我要说的是,不要把核心数据用于所有的东西,而是考虑将一些大文件放在缓存目录中,如果需要空间,IOS可以删除它们。当然,这意味着应用程序必须准备好查找丢失的文件并重新获取,但这会使应用程序成为“好公民”(并且可能更容易清除苹果的验收标准)。