2010-09-21 116 views
0

我陷入了一個奇怪的情況,我從使用XML文件的網站獲取數據,我正在填充一個數組(NSMutableArray類型),我以後用它來在表視圖上顯示數據。問題是與UITableView相關的函數被調用較早,並且當時Array沒有被填充,這導致程序崩潰。當執行此函數時,arrayData爲空,並且count函數不返回任何內容。有沒有什麼辦法比UITableView函數更早地調用NSXMLParser函數。UITableView和NXXMLParser ...調用層次結構


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [arrayData count]; 
} 
 

感謝, 泰穆爾

回答

1

你的情況並不奇怪 - 它是非常常見的開發時具有異步數據加載要求的應用。

NSXMLParser是一個SAX(事件驅動)解析器 - 當數據可用時它將解析數據。當你選擇顯示你的表時,這取決於你,但顯然如果你在XML數據可用之前嘗試顯示它,那麼你將不得不採取措施來防止崩潰,或者至少不良的用戶體驗。通常,您會顯示活動微調器或「加載數據...」消息,直到數據準備就緒,並在後臺線程中加載XML。一旦加載,BG線程應該向UI線程發出數據已準備就緒的信號,並且可能調用表上的reloadData來加載數據。

+0

高超的解釋,非常感謝你 它的固定和工作像一個魅力:)! – 2010-09-21 13:49:11

2

,如果它存在,但不包含任何對象的數組將返回0 - 這樣的應用程序應該不會崩潰。這意味着你的數組還沒有被初始化。你已經可以添加一個指向你的數組的指針作爲實例變量,也許作爲屬性,但你仍然需要創建指針應該指向的實際對象。

所以,如果我們有一個視圖控制器子類的屬性在這裏處理,加入這樣的事情您的viewDidLoad方法:

NSMutableArray *newArray = [[NSMutableArray alloc] init]; 
self.arrayData = newArray; 
[newArray release];