【问题标题】:UITableView and NXXMLParser ... Calling HierarchyUITableView 和 NXXMLParser ...调用层次结构
【发布时间】:2011-04-15 04:04:15
【问题描述】:

我陷入了一个奇怪的境地,我正在使用 XML 文件从网站获取数据,并且我正在填充一个数组(NSMutableArray 类型),我稍后会使用它在表视图上显示数据。问题是UITableView相关函数调用较早,此时Array没有填满,导致程序crash。执行此函数时,arrayData 为空,count 函数不返回任何内容。有什么方法可以比 UITableView 函数更早地调用 NSXMLParser 函数。

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

谢谢, 泰米尔

【问题讨论】:

    标签: iphone objective-c uitableview nsxmlparser


    【解决方案1】:

    如果该数组存在但不包含任何对象,则该数组将返回 0 - 因此应用程序不应崩溃。这意味着您的数组尚未初始化。您已经适当地添加了指向数组的指针作为实例变量,也可能作为属性,但您仍然需要创建该指针应指向的实际对象。

    所以,如果我们在这里处理 viewcontroller 子类的属性,请在 viewDidLoad 方法中添加类似这样的内容:

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

    【讨论】:

      【解决方案2】:

      您的情况一点也不奇怪——在开发具有异步数据加载要求的应用时非常常见。

      NSXMLParser 是一个 SAX(事件驱动)解析器 - 它会在数据可用时解析数据。当您选择显示您的表格时,这取决于您,但显然如果您尝试在 XML 数据可用之前显示它,那么您将不得不采取措施来防止崩溃,或者至少是糟糕的用户体验。通常,您会显示活动微调器或“正在加载数据...”消息,直到数据准备好,然后在后台线程中加载 XML。加载后,BG 线程应向 UI 线程发出数据准备就绪的信号,并可能在表上调用 reloadData 以加载数据。

      【讨论】:

      • 精湛的解释,非常感谢你它的固定和工作就像一个魅力:)!
      猜你喜欢
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2013-01-05
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多