表视图崩溃了

时间:2013-03-25 10:37:06

标签: iphone xml uitableview

我是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;
    }

}

3 个答案:

答案 0 :(得分: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:方法中的任何冗长方法。

答案 1 :(得分:-1)

您需要编写此代码段

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

cell.textLabel.text = record.locationname;`

out of if block。

享受编程!!

答案 2 :(得分:-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;

}