0

我是 iPhone 应用程序开发的新手。我目前正在研究 XML 解析。我正在从 xml 文件中提取记录并将其存储在可变数组中。我有一个表格视图,我正在从该可变数组加载表格视图。我在通过调试找到的表视图中得到 18 行。问题是当我向下滚动到 10 行时,它移动得很好,但是当第 10 行出现时,应用程序崩溃了。我得到的错误EXC_BAD_ACCESS。这是我加载单元格的代码。谢谢。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

        Location *record = [[Location alloc] init];

        record = [[parse locationarr] objectAtIndex:indexPath.row];

        cell.textLabel.text = record.locationname;

        return cell;
    }

}
4

3 回答 3

2

您发布的代码中有一些错误,首先您只返回一个单元格是表格没有返回一个单元格用于出队

因此,更改您的代码同样可以解决该问题:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

   Location *record = [[Location alloc] init];
   record = [[parse locationarr] objectAtIndex:indexPath.row];

   cell.textLabel.text = record.locationname;

   return cell;
}

每次都必须allocinit一个Location非常昂贵,最好Location在每次需要一个单元格时调用的类中有一个。更好的是只获取单元格的数据,而不是在方法中执行任何冗长的tableVieew:cellForRowAtIndexPath:方法。

于 2013-03-25T10:41:57.897 回答
-1

你的错误是“返回单元格”,它写在 if 条件里面,把它放在外面也行标题标签文本设置边条件。像这样..

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

if(cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

    Location *record = [[Location alloc] init];

}
else
{
  // get  record object here  by tag.  
}
record = [[parse locationarr] objectAtIndex:indexPath.row];

cell.textLabel.text = record.locationname;

 return cell;

}

于 2013-03-25T11:03:29.327 回答
-1

您需要编写此代码段

`record = [[parse locationarr] objectAtIndex:indexPath.row];

cell.textLabel.text = record.locationname;`

超出 if 块。

享受编程!!

于 2013-03-25T10:48:07.763 回答