删除tableView及其对应的Parse.com数据的行

时间:2014-06-14 16:54:51

标签: ios objective-c uitableview

我正在尝试同时删除tableView行及其对应的parse.com数据。但我似乎无法获取数据重新加载和删除tableView行。但是,我可以在单击单元格上的删除时从解析中删除数据,但应用程序将崩溃。重新启动应用程序后,tableview行将具有正确的当前数据。这是我试图删除行的方式。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView beginUpdates];
if (editingStyle == UITableViewCellEditingStyleDelete)
{

    PFUser *user = [PFUser currentUser];
    [user removeObject:[[user objectForKey:@"favoritedTracksArray"]objectAtIndex:indexPath.row] forKey:@"favoritedTracksArray"];
    [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (!error)
        {

            [user refreshInBackgroundWithBlock:^(PFObject *object, NSError *error) {
                if (!error) {


                    [[[[self.tracks objectAtIndex:0]objectForKey:@"favoritedTracksArray"]mutableCopy]removeObjectAtIndex:indexPath.row];
                    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationLeft];

                    [tableView reloadData];
                    [tableView endUpdates];
                }
                else NSLog(@"%@", error);
            }];

        }
        else NSLog(@"%@",error);
    }];


}

}

如您所见,我正在从Parse.com中删除PFObject,并保存更改。如果保存成功,我刷新我的Parse对象上的数据。如果保存成功,则删除数组的对象并删除相应的行,然后重新加载tableView的数据。 显然这是不正确的,因为我收到此错误...

  

“因未捕获的异常而终止应用程序'NSInternalInconsistencyException',原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(1)必须等于更新前的该部分中包含的行(1),加上或减去从该部分插入或删除的行数(插入0,删除1),加上或减去移入或移出该部分的行数(0移动) in,0搬出去。'“

1 个答案:

答案 0 :(得分:0)

崩溃发生在这条线上:

[[[[self.tracks objectAtIndex:0]objectForKey:@"favoritedTracksArray"]mutableCopy]removeObjectAtIndex:indexPath.row];

真的讨厌它的外观,所以我将其格式化:

NSDictionary *tracksDictionary = [self.tracks objectAtIndex:0];
NSArray *favoriteTracks = [tracksDictionary objectForKey:@"favoritedTracksArray"];
NSMutableArray *mutableFavoriteTracks = [favoriteTracks mutableCopy];
[mutableFavoriteTracks removeObjectAtIndex:indexPath.row];

您正在创建阵列的副本并删除其中的对象。这不会影响提供数据源的原始数组/容器。

因此,您在表格视图中删除了一行,但未在数据源中删除。

您应该将mutableFavoriteTracks设为属性,而不是这样做,这将代表表视图的数据源,并在需要时从此数组中删除曲目。