在rowindexpath中删除tableView中的项目会删除它下面的项目吗?

时间:2015-05-18 20:12:11

标签: ios objective-c uitableview

我有一个奇怪的问题。我有一个填充的tableview,允许用户通过向右滑动并点击“删除”来删除项目。功能正常,从表中以及从数据源(Drupal节点)成功删除项目。但是,出于某种原因,当我滑动项目以删除它时,它实际上删除了我在数据源中选择的项目的UNDERNEATH项目。 例如我选择在我的tableview中删除节点133,并删除节点132。

我已经创建了一个字符串,用于从Drupal中获取所选行的节点ID,但它几乎就像是在我所选行中的节点ID之前获取节点ID ...

参见代码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [self.descripData removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

        NSMutableDictionary *nodeData = [[self.descripData objectAtIndex:indexPath.row] mutableCopy];
        NSString *nid = [nodeData objectForKey:@"nid"];
        [nodeData setObject:nid forKey:@"nid"];
        [DIOSNode nodeDelete:nodeData success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"node deleted!");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"could not delete node!");
       }];

        [tableView reloadData];
    }

}

1 个答案:

答案 0 :(得分:2)

问题是,在删除self.descripData中的数据后,您将获取nodeData 。因此,您可以获取下一行的数据。颠倒顺序。

另外,请勿致电reloadData。您已从表中删除已删除的行。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        NSMutableDictionary *nodeData = [[self.descripData objectAtIndex:indexPath.row] mutableCopy];

        // Delete the row from the data source
        [self.descripData removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

        NSString *nid = [nodeData objectForKey:@"nid"];
        [nodeData setObject:nid forKey:@"nid"];
        [DIOSNode nodeDelete:nodeData success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"node deleted!");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"could not delete node!");
       }];
    }
}