2010-05-18 95 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將幫助您大大減少測試應用程序的開發難度,讓您的各種框架和類別都能讓您的應用程序更上一層樓。