NSInternalInconsistencyException - 根据CGPoint位置删除行

时间:2013-03-26 00:28:23

标签: iphone ios objective-c

所以我有一个带按钮抽屉的滑动UITableViewCell。根据另一个用户,我被引导到一个非常好的实现来获取UITableViewCell的indexPath。不幸的是,当我试图删除该行时,我收到了一个错误。但对象成功删除了。

-(void)checkButtonWasTapped:(id)sender event:(id)event {
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
    NSLog(@"%@", indexPath);
    if (indexPath != nil)
    {
        PFObject *object = [self.listArray objectAtIndex:indexPath.row];
        [object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            NSLog(@"%@", indexPath);
            [self.tableView beginUpdates];
            [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                                  withRowAnimation:UITableViewRowAnimationFade];
            [self.tableView endUpdates];
            [self.tableView reloadData];
        }];
    }

}

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

看起来你正在使用Parse,这是一个非常好的服务,IMO。 deleteInBackground:负责云删除,但您还没有从支持表的本地阵列中删除。尝试添加以下行:

[self.listArray removeObject:object];
在你得到PFObject *object之后

。如果它不是一个可变数组,那么你需要一些额外的代码:

NSMutableArray *changeMyArray = [self.listArray mutableCopy];  // assume you're using ARC
[changeMyArray removeObject:object];
self.listArray = [NSArray arrayWithArray:changeMyArray];

此外,由于本地删除快速且同步发生,因此您无需在云删除的完成块中执行表更新。把它放在内联......

    PFObject *object = [self.listArray objectAtIndex:indexPath.row];
    [self.listArray removeObject:object];

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

    [object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        NSLog(@"%@", indexPath);
    }];