从表中删除单元格 - 使用代码 - 逻辑问题

时间:2012-02-22 15:58:16

标签: iphone objective-c

我有一个BarButton项目,当它处于编辑模式时它的名称是Edit,而当它完成编辑时它是Done。因此,当用户点击编辑时,editpress方法会被执行(参见代码)。

使用commitEditingStyle,单元格和记录(从用于向单元格添加数据的数组)将被删除。

问题:当我点击删除时,单元格会从表格中正确删除。但不是来自用于加载单元格的数组。当我在commitEditingStyle放置一个调试点时,它只在我第一次点击删除时执行该代码。如果我删除第2个,第3个等的记录,则不执行此代码块。为什么是这样 ?

我尚未在[self.tableView setEditing:YES animated:YES];中添加commitEditingStyle条记录。那是缺陷吗?

注意:我不认为我从数组逻辑中删除是不正确的,因为相同的逻辑在其他程序中有效(保护,这就是我没有发布它的原因)

  -(void) editpress:(id)sender{
        UIBarButtonItem *editButton = (UIBarButtonItem*)self.navigationItem.leftBarButtonItem;    
        if (!self.tableView.editing) {  
            [self.tableView setEditing:YES animated:YES];
            UIButton *rbut= [UIButton buttonWithType:UIButtonTypeCustom];
            [rbut setImage:rightImage forState:UIControlStateNormal];       
            [rbut addTarget:self action:@selector(editpress:) forControlEvents:UIControlEventTouchUpInside];        
            UIBarButtonItem *rBarButDone =  [[UIBarButtonItem alloc] initWithCustomView:rbut];
            self.navigationItem.rightBarButtonItem = rBarButDone;       
        }
        else { 
            [self.tableView setEditing:NO animated:YES];
            UIButton *rbut= [UIButton buttonWithType:UIButtonTypeCustom];
            [rbut setImage:rightImage forState:UIControlStateNormal];              
            [rbut addTarget:self action:@selector(editpress:) forControlEvents:UIControlEventTouchUpInside];        
            UIBarButtonItem *rBarButEdit =  [[UIBarButtonItem alloc] initWithCustomView:rbut];
            self.navigationItem.rightBarButtonItem = rBarButEdit;
        }
    }


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {        
        [self.tableView beginUpdates];
        // I write the logic to delete the record from the array and the table here.         
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];  
        [self.tableView endUpdates];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}

1 个答案:

答案 0 :(得分:0)

代码显然正在执行commitEditingStyle。但是,删除后,cellForRowAtIndexPath现在是否为已删除的行返回正确的数据?如果您从下载的内部阵列中读取数据,则需要从该内部阵列中删除项目。如果您正在从其他来源读取数据,则需要确保源正在发送正确的数据,或者在删除行后刷新它。在任何一种情况下,无论您的“Web服务”正在做什么来删除数据,都不会使用新数据刷新单元格。此外,您需要在numberOfRowsInSection:method中报告少一个。