在显示数据之前处理异步下载延迟

时间:2014-01-04 11:53:17

标签: ios cocoa-touch core-data asynchronous nsfetchedresultscontroller

我的应用程序以异步方式连接到Parse服务器,并将必要的数据下载到应用程序的Core Data存储中。然后我想在tableview中显示这些数据。但在大多数情况下 - 由于连接是异步的 - 表视图可以比下载的更快地访问数据存储。在这种情况下,我得到一个空的表视图单元格,之后数据在数据存储中就绪了。

处理异步下载造成的延迟的最佳方法是什么?有一个我缺少的概念吗?是NSFetchedResultsController吗?

2 个答案:

答案 0 :(得分:1)

  

您认为应对由此造成的延误的最佳方法是什么?   异步下载?

这取决于您的要求。特别是,如果用户可以在异步下载期间与UI进行交互,则无法对其执行任何操作,否则您只需使用微调器即可提醒他正在下载并停止交互,直到同步完成为止。

无论如何,在这两种情况下,你都应该说下载。特别是,您是否将数据保存在不同的线程中(与主线程不同)?如果是这样,您应该将您在后台使用的上下文中的更改合并到与NSFetchedResultsController关联的上下文(始终是NSFetchedResultsController管理UI元素后的主要上下文)。

  

是否存在"概念"我想念,是NSFetchedResultsController?

您是否正确设置了代理人NSFetchedResultsControllerDelegate?如果是,NSFetchedResultsController跟踪您在获取请求中注册的实体的更改。其他实体不会发生变化。

答案 1 :(得分:1)

异步是您需要使用的设计问题。查看您所在领域的其他一些热门应用程序,看看它们是如何解决的。他们是否展示了一个微调器(我个人讨厌这个)或者他们是否展示了一些不显眼的指示数据正在下载(更好)?

如果您使用NSFetchedResultsController(我猜你当前不是这个问题),一旦将数据保存在Core Data中,您将获得显示的数据,而无需您付出额外的努力。所以你至少可以尽快显示数据。

与此同时,我建议让cell / table为空,让用户知道您的应用正在运行。尽快显示数据。也许考虑将数据分段下载,以便他们可以尽快开始查看。