2010-04-06 34 views
2

我是iphone開發新手。我創建了一個應用程序,在第一個標籤欄視圖中加載一個網頁,在第二個標籤欄視圖中,它解析一個xml文件並在表格視圖中顯示內容。當我點擊第二個標籤欄時,只有在解析完成後才能看到標籤欄視圖,直到解析時間標籤欄顯示爲未選定狀態。我想在解析完成時顯示帶活動指示器的標籤欄視圖。如何我做到了,請幫助我。謝謝。如何在iphone中解析完成時顯示標籤欄視圖?

回答

1

沒有額外的信息很難說,但我想你解析viewDidLoad()loadView(內的XML文件)。但是,解析可能實際上需要時間,並且您正在阻止負責更新UI的主線程。這就是爲什麼只有在解析完成後才能看到標籤欄的原因。

要解決這種情況,您需要推遲顯示數據的表視圖,顯示活動指示符以告訴用戶正在發生的事情,並啓動後臺線程來負責解析XML文件。處理線程XML文件一旦完成,然後停止活動指示器並使用解析的數據設置您的表視圖。

你可以做到這一點很容易利用現有的API(detachNewThreadSelector:toTarget:withObject:performSelectorOnMainThread:withObject:waitUntilDone:等),然而,你可能要考慮採取的MBProgressHUD提供正是你需要包裹在一個非常容易使用類的功能優勢。

0

我假定你知道或將能夠弄清楚如何讓活動指示器工作。

您可以使用NSXMLparser委託方法來分析xml數據。您可以收集模型對象中的xml數據,這些數據是您在類中解析xml(即簡單數組)的屬性。然後,從希望收到完成解析的通知的角度來看,您可以使用鍵值觀察(KVO)將其註冊爲關鍵路徑的觀察者。一旦這些屬性的值發生變化,您的視圖(或中間類)將被髮送一條消息,然後它可以用來更新顯示。

只要發送消息的類是適用於這些屬性的鍵值編碼(KVC),這些消息就會發送給註冊的觀察者。在大多數情況下,通過屬性使您的ivars可用。

添加一個觀察者:

- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context 

通知的變化:

- (void)didChangeValueForKey:(NSString *)key 

退房鍵值觀察文檔:

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20002299-SW7

0

我想你應該必須在指定的時間內使用NSTimer類。

執行解析數據的方法(即,GetXMLData --user定義的方法),通過它的方法,

NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(GetXMLData:) userInfo:nil repeats:NO]; 

,並開始活動指示燈使用

[activityIndicator startAnimating]; 

停在它下面的方法

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
. 
. 
. 
[activityIndicator stopAnimating]; 

} 

我希望你undrstand我是什麼告訴... 做評論,如果需要任何幫助...

0
  1. 不做在MainThread分析,分離新線程做解析([NSThread detachNewThreadSelector:toTarget:withObject:]
  2. 解析後(parserDidEndDocument:)使用performSelectorOnMainThread刷新的tableView 。
相關問題