将大量XML从RESTful服务异步提取到Core Data存储中,以及从此存储中快速填充UITableView
的好方法是什么?
我正在考虑使用libxml2的xmlParseChunk()
函数来解析传入XML的块,并在节点进入时将节点及其子节点转换为相关的托管对象。
在将这些XML节点转换为托管对象的同时,我想依次生成UITableView
行。比如说,一次50行。这是现实的吗?
根据您的经验,您如何完成此任务,以维护性能并处理数千行?有不同的,更简单的方法可以运作得更好还是更好?
答案 0 :(得分:14)
当然,这是一个非常标准的事情。最简单的解决方案是在一个MOC上的后台线程中加载,并在主线程上运行UI并使用自己的MOC。每当你想要出现一大块数据时(例如50个条目),你就有了背景MOC save:
。
假设你有前景MOC被绑定以合并更改(通过mergeChangesFromContextDidSaveNotification:
),那么无论何时保存背景MOC,前台MOC都将获得所有这些更改。假设您使用的是NSFetchedResultsController,它有委托方法来处理其MOC中的更改,如果您使用Apple的示例代码,那么您可能已经正确设置了所有内容。
一般来说,除非你真的知道自己在做什么,并且愿意花费大量时间来调整你的特定情况,否则CoreData会比你自己动手的任何东西都要快。您可以做的最重要的事情是确保缓慢的事情(如save:
引起的XML处理和同步闪存I / O)不在阻止用户交互的主线程上。
答案 1 :(得分:2)
从这里开始,将CoreData存储起来并不是一个很大的延伸,只需按照您认为适合的钩子对类进行子类化。
如果您担心数据太多,一次50个听起来合理。这些类有一个内置的“更多”按钮来帮助你。
来自Three20自述文件:
支持Internet的表视图控制器
TTTableViewController和 TTTableViewDataSource可以帮助您 构建加载其内容的表 来自网络。而不仅仅是 假设您已准备好所有数据 去,像UITableView一样 默认情况下,TTTableViewController允许 你的数据是什么时候沟通 加载,当出现错误或 无内容显示。它也可以帮助你 添加“更多”按钮来加载 下一页数据,也可以选择 支持通过摇动重新加载数据 设备。
答案 2 :(得分:0)
还没有人提到RestKit吗?我的朋友......说真的,你得看看这个。如果你在iOS上(现在在OS X上)使用REST做任何事情,特别是如果你想使用Core Data ...请看看RestKit。我在服务器和iOS上的核心数据模型之间实现了一些相当复杂的数据同步,从而节省了不少时间。 RestKit让它太容易了,它几乎让你生病了。