我正在尝试同时删除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搬出去。'“
答案 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
设为属性,而不是这样做,这将代表表视图的数据源,并在需要时从此数组中删除曲目。