【问题标题】:Good strategies for REST -> XML -> Core Data -> UITableView?REST -> XML -> 核心数据 -> UITableView 的好策略?
【发布时间】:2010-12-02 10:03:10
【问题描述】:

将大量 XML 从 RESTful 服务异步拉入 Core Data 存储并从该存储中即时填充 UITableView 有哪些好的做法?

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

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

根据您的经验,您如何完成这项任务、保持性能并可能处理数千行?是否有不同的、更简单的方法同样有效或更好?

【问题讨论】:

标签: iphone parsing uitableview core-data libxml2


【解决方案1】:

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

假设您已将前台 MOC 操纵为合并更改(通过mergeChangesFromContextDidSaveNotification:),那么每当您保存后台 MOC 时,前台 MOC 将获得所有这些更改。假设您使用的是 NSFetchedResultsController,它有委托方法来应对其 MOC 中的更改,如果您使用的是 Apple 的示例代码,那么您可能已经正确设置了所有内容。

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

【讨论】:

  • +1,但我很乐意让 sqlitepp.berlios.de 与 CoreData 在一场无限制的死亡比赛中较量,看看哪个更快
  • 我绝对可以(并且已经)直接使用 SQLite3 在特定工作负载上击败 CD。但通常所涉及的努力是淫秽的。通过使用 CoreData,我最终会得到一个更好的应用程序,然后用 1/3 的时间节省了调整应用程序其他部分的时间。我们不是在真空中编写代码。我已经学会了放弃一些绝对的理论性能并利用节省的时间对应用程序代码的其他部分进行(更大的)实际性能改进通常更好的方法。显然,具体细节因项目而异。
  • 是否有任何示例代码演示了如何使用多个 MOC 并将更改合并到一个主 MOC?
【解决方案2】:

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

从这里开始,将其存储为 CoreData 并没有太大的难度,只需使用提供的钩子对您认为合适的类进行子类化。

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

来自 Three20 自述文件:

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

【讨论】:

  • 我想我不清楚。我实际上想填充一个核心数据存储,它反过来填充一个表视图。目前尚不清楚这个子类是否解决了这个特定问题,如果它一个单元一个单元地提取数据(这不是我需要完成的)。
【解决方案3】:

还没有人提到RestKit?我的朋友们......说真的,你必须检查一下。如果您在 iOS(现在在 OS X)上使用 REST 做任何事情,特别是如果您想使用 Core Data ...请查看 RestKit。我在 iOS 上的服务器和我的 Core Data 模型之间实现了一些非常复杂的数据同步,节省了无数小时。 RestKit 让它变得如此简单,几乎让你恶心。

【讨论】:

  • RestKit 似乎很难处理 XML - 它附带的 XML 解析器在 iOS 5 上编译时会出现 ARC 错误。不过总体而言它看起来很棒 - 特别是对于直接 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多