2010-05-18 40 views
0

我的应用程序有一个导航控制器,可以推送和弹出一系列视图。其中一个tableView从URL加载.xml文件,需要4-5秒。如果我点击导航栏上的后退按钮,它只会在表格内容加载完成后才会做出响应。有没有简单的方法异步加载内容,以便应用程序仍然会响应我在导航栏上的手势? p.s.我在互联网上搜索这个,人们都在谈论多线程。我对线程了解不多,所以请更具体一些。iphone dev - 异步加载表格内容

回答

1

您应该异步重新加载远程数据。 Here您可以找到有关如何使用NSURLRequest和委托对象加载数据的其他信息。在这种情况下,您的应用程序不会卡住,直到文件完全加载(或发生超时/错误)。

+0

thx!我想我现在使用你提供的代码工作。 – Brian 2010-05-18 19:54:03

0

您可能需要实现多线程解决方案。多线程应用程序的主题是巨大的和一个详细的答案,因此会导致一本书,其中的其他内容可能更好地描述在其他地方。

基本知识将涉及一个或多个“worker”线程,用于获取XML文件并在信息可用时向主线程报告。为iPhone/iPad实现这一点不应该太难,因为操作系统提供了许多线程原语,使开发人员可以更轻松地完成这项工作。

1

苹果XMLPerformance示例应用程序专门编写的演示如何通过libxml2 SAX解析器解析XML(通过流)。使用流解析器对于快速异步更新以及保持应用程序内存配置文件较低很有用。

如果您将XML数据放入核心数据存储中,并将表视图挂接到NSFetchedResultsController及其委托方法,则可以使用非常少的代码使表格持续更新。核心数据和抓取的结果控制器远远超出了本答案的范围,但您可以搜索Stack Overflow和Google以获取有关这些主题的更多信息。

为了简单起见,您可以将数据放入NSMutableArray,并在数组状态更改时重新加载表视图或特定部分和行,但您必须自己管理表视图更新。请注意,除了数据模型之外,处理视图会很快变得复杂;点击后退按钮将会导致视图控制器以及任何相关的属性被释放,所以你需要小心地管理取消你的视图控制器的XML解析,并且管理驻留在你的数据模型的任何分配的内存视图控制器。否则,一旦视图控制器完全释放,您将遇到内存泄漏或访问已释放对象的异常。

为了让自己更轻松,您需要阅读NSOperation,NSOperationQueue和KVO,这将帮助您跟踪操作状态并在视图控制器弹出之前进行清理。 NSOperation类可以很容易地在后台运行作业。还有其他的手动方式来进行穿线和锁定,但它们几乎不如NSOperation那样令人愉快和干净。

Apple's NSOperation documentationApple's NSOperation documentation将帮助您大大减少测试应用程序的开发难度,让您的各种框架和类别都能让您的应用程序更上一层楼。