deleteInBackground

时间:2012-10-16 14:09:22

标签: ios xcode

我使用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移出)。'

1 个答案:

答案 0 :(得分: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];
但当然你应该知道你要做什么