删除行后UITableView reloadData无法正确显示

时间:2012-03-30 18:06:25

标签: objective-c ios uitableview nsmutablearray reloaddata

我有一个UITableView的代码,我在网上找到了两列。每当我向其添加另一行时它都可以正常工作,但是当我选择一行来删除它时,只需删除最后一行。我只是使用[NSMutableArray addObject:]将行添加到数组的底部,但是当我删除一行时,我首先选择要删除的行。

这里选择行------(我检查以确保tableViewIdx是正确的)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

   tableViewIdx = [indexPath row];
}

然后删除按钮------(我检查确保对象实际上已从数组中删除)

-(IBAction)bt_DeletePressed:(id)sender{
    [mutableArray removeObjectAtIndex:tableViewIdx];
    //delete actual content
    for(int i = VStableViewIdx;i<10;i++){
        g_vitals[i] = g_vitals[i+1];
    }
    [TableView reloadData];
    tableViewIdx--;
}

和一些tableView代码

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
   int count = [listData count];
   if(self.editing) count++;
   tableSize = count;
   return count;
}

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

   NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];

   MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
   if (cell == nil){
       cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];

       NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
       [formatter setDateFormat:@"HH:mm"];

       UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 60.00,tableView.rowHeight)] autorelease];
       [cell addColumn:60];
       label.font = [UIFont systemFontOfSize:12.0];
       label.text = textView.text;
       [formatter release];
       label.textAlignment = UITextAlignmentRight;
       label.textColor = [UIColor blueColor];
       label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
       UIViewAutoresizingFlexibleHeight;
       [cell.contentView addSubview:label]; 

       label =  [[[UILabel alloc] initWithFrame:CGRectMake(70.0, 0, 60.0,tableView.rowHeight)] autorelease];
       [cell addColumn:500];
       label.font = [UIFont systemFontOfSize:12.0];
       label.text = [NSString stringWithFormat:@"%d",respRateTemp];
       label.textAlignment = UITextAlignmentRight;
       label.textColor = [UIColor blueColor];
       label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
       UIViewAutoresizingFlexibleHeight;
       [cell.contentView addSubview:label];
   }

   return cell;
}

为什么它会删除最后一行而不是选择的那一行?

编辑:我实际上能够自己修复它,使用deleteRowsAtIndexPaths:而不是updateData,但是现在我有另一个问题。我的程序在模拟器上运行正常,但在设备上经常崩溃。它出现了错误:

编程接收信号:“EXC_BAD_ACCESS”。

数据格式化程序暂时不可用,将在“继续”后重试。 (找不到dlopen函数,因此无法加载共享库。)

1 个答案:

答案 0 :(得分:0)

“cellForRowAtIndexPath”委托存在问题。 根据你的逻辑tableview dequeueReusableCells索引号,这导致最后一行丢失而不是删除所选行。可能是你可以改变cellForRowAtIndexPath中的逻辑,或者你可以使用适当的数据结构&amp;用于管理表视图的算法。