5

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

每次用户打开应用程序时,都会从源加载相同的数据,并使用自定义对象转换为我可爱的数组。这需要很长时间(约 10-20 秒)并且使应用程序变得愚蠢。所以我试图获取数据并在此链接中显示它

我尝试了什么:

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

在任何人开始回答这个问题之前,请。查看示例代码并运行它以通过检索数据并显示它来确定我的意思。在重新启动样本后很快就会让我想更清楚:)

如果有人能让这个样本对我更清楚,我将不胜感激。

4

3 回答 3

2

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

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

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

这应该会大大提高您的应用程序的性能。如果你使用 Core Data,你可以通过设置 -[NSFetchRequest fetchBatchSize] 属性让它使用类似的行为。这将负责自动批量获取数据。

于 2013-06-13T14:21:44.093 回答
0

谢谢大家:)

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

不同的是在应用程序启动和首次添加时有条件获取数据的.pch文件中。ZAssert

于 2013-06-18T08:29:49.833 回答
0

我向您推荐一个非常简单的解决方案,我已经使用过很多次并且也非常有效。

  1. 如果下载成功,则在文件系统上下载视频然后写入文件
  2. 下次 SQLite 的路径检查文件是否具有相同的名称或相同的 ID
  3. SQLite 文件中也存在如果是,则从 SQLite 播放视频
  4. 否则转到第一步。

对于此解决方案,您必须创建一个新的管理器类,以确保您必须从哪里获取数据。

于 2013-06-14T12:01:41.913 回答