导入,显示和缓存大数据

时间:2013-06-09 21:35:23

标签: iphone ios ios5 ios6 nsmutablearray

我正在尝试从某些地方获取数据并将其保存在包含该数据和信息的NSMutableArray个自定义对象中。

每次用户打开应用程序时,都会从源加载相同的数据,并使用自定义对象将其转换为我的可爱数组。这需要很长时间(约10-20秒)并使应用程序像一个愚蠢的。所以我尝试获取数据并将其显示在this link

我尝试了什么:

  • 将包含自定义对象的数组保存到文件中,并在下一个应用程序启动(如果找到)上加载此文件,而无需再次从头开始创建自定义对象。
  • 自定义对象编码&解码需要很长时间才能完成测试。即使您将其保存在NSUserDefault

在任何人开始回答这个问题之前。看看示例代码并运行它以确保检索数据并显示它的含义。在重新启动样品后的快速时间内做出我想要更清楚的事情:)

如果有人能让我sample更清楚,我会感激不尽。

3 个答案:

答案 0 :(得分:2)

在我看来,你只有两个合理的选择:1)显而易见的是使用数据库存储和核心数据来管理你的对象。 2)如果您不想使用Core Data,您可以单独存储每个自定义对象,以便可以批量加载它们。

如果你想选择第二个选项,你可以:

1)在自定义对象上实现NSCoding协议。 (这只是一些样板代码,非常简单) 2)加载数据后,可以异步将其保存到磁盘(这样就不会阻止UI)。 3)当应用程序启动时,您可能会加载一批对象(例如20,考虑到您在给定点只显示~10)。然后,当用户滚动浏览您的内容时,您可以在同一个块中异步加载更多内容,以便在需要时可以显示它们。

这应该会大大提高您应用的效果。相反,如果您使用Core Data,则可以通过设置 - [NSFetchRequest fetchBatchSize]属性来使用类似的行为。这将自动批量获取数据。

答案 1 :(得分:0)

我建议你一个非常简单的解决方案,我已经多次使用过,而且非常有效。

  1. 如果下载成功则下载文件系统上的视频,然后写入文件
  2. 下次检查SQLite的路径,检查具有相同名称或相同ID的文件
  3. 也存在于SQLite文件中如果是,则播放来自SQLite的视频
  4. 否则转到第一步。
  5. 对于此解决方案,您必须创建一个新的管理器类,以确保从何处获取数据。

答案 2 :(得分:0)

全部:)

我发现这个简单的tutorial解释了示例代码“fetchedResultsController”的某些部分。

,不同之处在于.pch文件,其中有ZAssert条件在应用开始时和第一次添加时获取数据。