REST的好策略 - > XML - >核心数据 - > UITableView的?

时间:2009-09-29 18:01:46

标签: iphone parsing uitableview core-data libxml2

将大量XML从RESTful服务异步提取到Core Data存储中,以及从此存储中快速填充UITableView的好方法是什么?

我正在考虑使用libxml2的xmlParseChunk()函数来解析传入XML的块,并在节点进入时将节点及其子节点转换为相关的托管对象。

在将这些XML节点转换为托管对象的同时,我想依次生成UITableView行。比如说,一次50行。这是现实的吗?

根据您的经验,您如何完成此任务,以维护性能并处理数千行?有不同的,更简单的方法可以运作得更好还是更好?

3 个答案:

答案 0 :(得分:14)

当然,这是一个非常标准的事情。最简单的解决方案是在一个MOC上的后台线程中加载,并在主线程上运行UI并使用自己的MOC。每当你想要出现一大块数据时(例如50个条目),你就有了背景MOC save:

假设你有前景MOC被绑定以合并更改(通过mergeChangesFromContextDidSaveNotification:),那么无论何时保存背景MOC,前台MOC都将获得所有这些更改。假设您使用的是NSFetchedResultsController,它有委托方法来处理其MOC中的更改,如果您使用Apple的示例代码,那么您可能已经正确设置了所有内容。

一般来说,除非你真的知道自己在做什么,并且愿意花费大量时间来调整你的特定情况,否则CoreData会比你自己动手的任何东西都要快。您可以做的最重要的事情是确保缓慢的事情(如save:引起的XML处理和同步闪存I / O)不在阻止用户交互的主线程上。

答案 1 :(得分:2)

Joe Hewitt(Facebook应用开发者)已将其大部分代码发布为开源代码。它被称为Three20。那里有一个类非常适合获取Internet数据并将其填充到表中,而不需要事先获取数据。用于此的类称为TTTableViewControllerTTTableViewDataSource

从这里开始,将CoreData存储起来并不是一个很大的延伸,只需按照您认为适合的钩子对类进行子类化。

如果您担心数据太多,一次50个听起来合理。这些类有一个内置的“更多”按钮来帮助你。

来自Three20自述文件:

  

支持Internet的表视图控制器
  TTTableViewController和   TTTableViewDataSource可以帮助您   构建加载其内容的表   来自网络。而不仅仅是   假设您已准备好所有数据   去,像UITableView一样   默认情况下,TTTableViewController允许   你的数据是什么时候沟通   加载,当出现错误或   无内容显示。它也可以帮助你   添加“更多”按钮来加载   下一页数据,也可以选择   支持通过摇动重新加载数据   设备。

答案 2 :(得分:0)

还没有人提到RestKit吗?我的朋友......说真的,你得看看这个。如果你在iOS上(现在在OS X上)使用REST做任何事情,特别是如果你想使用Core Data ...请看看RestKit。我在服务器和iOS上的核心数据模型之间实现了一些相当复杂的数据同步,从而节省了不少时间。 RestKit让它太容易了,它几乎让你生病了。