2010-09-21 133 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];