0

我正在使用 Parse DB,需要 currentUsers 才能从中删除。我在 UITableView 中设置了一个 PFQuery,它返回 currentUsers 条目。这是我迄今为止尝试过的,但没有成功。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source

        [filteredBooks removeObjectAtIndex:indexPath.row ];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationFade];


        PFObject *myobject = [PFObject objectWithClassName:@"Books"];
        [myobject deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (succeeded) {

                [self.tableView reloadData];
            }

        }];

    }
    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
    }   
}

它抛出异常:原因:'无效更新:第 0 节中的行数无效。更新后现有节中包含的行数(2)必须等于更新前该节中包含的行数( 2),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入,0 移出)。

4

1 回答 1

0

你应该做的第一件事是解决这个问题:

[filteredBooks removeObjectAtIndex:indexPath.row ];<br>
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                 withRowAnimation: UITableViewRowAnimationFade];

将其替换为:

[filteredBooks removeObjectAtIndex:indexPath.row ];
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                 withRowAnimation: UITableViewRowAnimationFade];
[tableView endUpdates];

我不确定第二部分。如果myObject与您从中删除的对象相同,filteredBooks则您根本不必[tableView reloadData]在完成块中进行操作。你能描述一下你想在那里做什么吗?

此外,为了在 tableView 中获得更好的性能以及漂亮的更新动画,我更喜欢使用表更新而不是 reloadData,如下所示:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows]
                 withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

而不是,[tableView reloadData];
但当然你应该知道你要做什么

于 2012-10-16T15:12:13.247 回答