我使用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移出)。'
答案 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];
但当然你应该知道你要做什么