点击时滑动以删除崩溃

时间:2016-02-12 01:45:51

标签: ios objective-c uitableview

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {

        PFObject *object = [_tdlArray objectAtIndex:(_tdlArray.count - indexPath.row -1)];
        [object deleteInBackground];

        //found the code for removing a row.
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        [tableView reloadData];
        [object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (!succeeded){

                [tableView reloadData];

            }

        }];

    }

}

我能够成功删除数据,但每次点击删除按钮时我的应用都会崩溃。我认为这与[NSArray arrayWithObject:indexPath]

有关

这些是错误消息

Assertion failure in -[UITableView _endCellAnimationsWithContext:]
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (3) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

1 个答案:

答案 0 :(得分:1)

您想删除该对象,然后重新加载数据。不要异步调度要删除的对象然后告诉tableview你正在删除行,因为该对象可能尚未被删除,因此你得到的错误。删除对象后,使用回调块更新tableview,这样可以确保删除了对象。此外,如果您的数据本地存储未绑定到服务器上的数据,则还需要从该处删除该对象。

   - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            //not sure how you're calculating the index here
            PFObject *object = [_tdlArray objectAtIndex:(_tdlArray.count - indexPath.row -1)];
            NSMutableArray *mutArray = [_tdlArray mutableCopy];
            [mutArray removeObject:object];
            _tdlArray = [NSArray arrayWithArray:mutArray];
            [object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
                if (!succeeded){
                    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
                    [tableView reloadData];

                }

            }];

        }

    }