所以我有一个带按钮抽屉的滑动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];
}];
}
}
感谢您的帮助
答案 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);
}];