2009-09-29 99 views
9

什么是将大量XML从RESTful服务异步提取到Core Data存储区的良好实践,并且从该商店中动态填充UITableViewREST的好策略 - > XML - >核心数据 - > UITableView?

我想使用的libxml2的xmlParseChunk()函数来分析传入的XML的块和翻译节点及其子到相关管理对象,如节点进来的。

与此同时,这些XML节点变成托管对象,我想依次生成UITableView行。说一次50行。这是现实的吗?

根据您的经验,您要做什么来完成此任务,以保持性能并可能处理数千行?是否有不同的,更简单的方法可以同样或更好地工作?

+1

您可能会发现http://cocoawithlove.com/2009/09/optimizing-loading-of-very-large-table.html有用。 – 2009-09-29 18:05:32

回答

14

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

假设您使用前景MOC操纵来合并更改(通过mergeChangesFromContextDidSaveNotification:),那么无论您何时保存背景MOC,前景MOC都将获得所有这些更改。假设你使用的是NSFetchedResultsController,它具有委托方法来处理MOC中的变化,如果你使用的是Apple的示例代码,那么你可能已经准备好了一切。

一般而言,除非您真的知道自己在做什么,并且愿意花费大量时间调整您的特定情况,否则CoreData将比自己推出的任何内容更快。您可以做的最重要的事情是确保缓慢的事情(例如由​​引起的XML处理和同步闪存I/O)不在阻止用户交互的主线程上。

+0

+1,但是我很想在一场无防守的死亡比赛中对抗CoreData http://sqlitepp.berlios.de/,看看哪个更快。 – slf 2009-10-08 20:21:15

+3

我绝对可以(并且)在特定的工作负载上击败CD直接使用SQLite3。但通常涉及的努力量是猥亵的。我最终将通过使用CoreData获得更好的应用程序,然后以1/3的时间保存调整我的应用程序的其他部分。 我们不会在真空中编写代码。我已经学会了艰难的方式,放弃一些绝对的理论性能并使用节省的时间来实现其他应用程序代码的实际性能改进是更好的。显然,具体细节因项目而异。 – 2009-10-09 02:41:33

+0

是否有示例代码演示如何将多个MOC与合并到一个主要MOC的更改结合使用? – 2009-10-09 09:45:47

2

Joe Hewitt(Facebook应用程序开发人员)已经将他的许多代码释放为开源代码。它被称为Three20。有一个课程非常适合读取互联网数据并将其填充到表格中,而无需事先提供数据。用于此的类别被称为TTTableViewControllerTTTableViewDataSource

从这里开始,存储CoreData并不算什么,只是按照您认为适合的提供的钩子子类。

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

从Three20自述:

互联网知觉表视图控制器
TTTableViewController和 TTTableViewDataSource帮你到加载从互联网上的内容 建表。而不是仅仅 假设你都准备好 去的数据,如UITableView的不通过 默认情况下,TTTableViewController让 你沟通时,你的数据是 加载,当有错误或 没有显示。它还可以帮助您 添加一个“更多”按钮来加载数据的下一页,并且可选地, 支持通过晃动设备来重新加载数据。

+0

我想我不清楚。我实际上想要填充一个核心数据存储,它依次填充表视图。目前尚不清楚这个子类是否解决了这个问题,如果它逐个单元地提取数据(这不是我需要完成的)。 – 2009-10-03 07:33:36

0

没有人提到RestKit了吗?我的朋友......严重的是,你必须检查一下。如果你在iOS上(现在在OS X上)使用REST做什么,特别是如果你想要使用Core Data ......请看看RestKit。我已经在iOS上保存了无数个小时的服务器和我的Core Data模型之间的一些非常复杂的数据同步。 RestKit让它变得很容易,它几乎让你生病。

+0

RestKit似乎很难与XML--它自带的XML解析器在iOS 5上编译时有ARC错误。总的来说,它看起来很棒 - 特别是对于直线JSON。 – radven 2012-04-26 08:12:00

相关问题