如何从iPad上的UITableView中删除一行

时间:2015-03-09 16:56:13

标签: ios objective-c uitableview

我向左滑动(正常方式)时有一个tableView和一个删除。当我点击删除按钮时,记录将从数据库中删除但不会形成视图。我想立即从桌子上删除它。为了看到记录被删除,我需要回到上一个视图并再次返回到tableView,然后记录就消失了。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
    NewArt *currArt = [self.lN_Dep objectAtIndex:indexPath.row];

    self.deptsub = [self.lN_Dep subarrayWithRange:NSMakeRange(indexPath.row, (self.lN_Dep.count - indexPath.row))];

    self.selectedURL = [currArt.link absoluteString];
    self.selected_ID = (NSString *)currArt.art_ID;
    self.selectedArt = currArt;

    NSArray *ArrayOfArtIDs_old = [ArtString componentsSeparatedByString:@","];
    NSMutableArray *ArrayOfArtIDs_new = [[NSMutableArray alloc]init];
    ArrayOfArIDs_new = [[NSMutableArray alloc] initWithArray:ArrayOfArtIDs_old];

    for (NSString *item in ArrayOfArtIDs_old) {
        if ([item isEqualToString:self.selected_ID]) {
            [ArrayOfArtIDs_new removeObject:self.selected_ID];
            NSString *updateArt = [self updatedArtIDs:ArrayOfArtIDs_new];
            if ([updateArt isEqualToString:@"true"]) {
                [self.tableView beginUpdates];
                [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
                [_lN_Dep removeObjectAtIndex:indexPath.row];
                //[_lN_Dep removeObject:indexPath];
                [self.tableView endUpdates];
            }
        }
    }
    [self bookMarkedFeed];
}

当我按下删除时,程序会中断,此行会突出显示。

[_lN_Dep removeObject:indexPath]; 

[_lN_Dep removeObjectAtIndex:indexPath.row];

4 个答案:

答案 0 :(得分:1)

对不起,没有代表发表评论...... 最新的错误是因为您的NSArray不可变。 尝试:

NSMutableArray *temp = [NSMutableArray arrayWithArray:self.lN_Dep];
[temp removeObjectAtIndex:indexPath.row];
self.lN_Dep = [NSArray arrayWithArray:temp];

答案 1 :(得分:0)

使用以下行删除动画,

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

答案 2 :(得分:0)

使用建议删除行的代码:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

您获得的错误是因为tableView数据源仍包含您已删除的行的记录。您需要从数组中删除该对象。我认为它将是:

[self.lN_Dep removeObjectAtIndex:indexPath.row];

答案 3 :(得分:0)

_lN_DepNSArray_NSArrayI - > _NSArrayI(mmutable)是NSArray类集群的具体私有实现),因此它不支持任何删除方法。将其设为NSMutableArray或将其复制到可变的临时数组中,删除其中的内容,将其分配回来(作为友好的副本)。