在UITableView中插入新项会导致部分数量无效

时间:2014-07-14 04:07:11

标签: objective-c uitableview

我在这里失去了理智。相关代码:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return [[self.currentWorkout movements] count];
}

和...

- (void)addMovement:(Movement *)movement{
    [self.currentWorkout.movements insertObject:movement atIndex:0];

    [self.table beginUpdates];
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.table insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationTop];
    [self.table endUpdates];
}

我已确认insertObject:atIndex:正在添加对象; currentWorkout的数量增加1。

Error: 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (8) must be equal to the number of sections contained in the table view before the update (7), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'

1 个答案:

答案 0 :(得分:0)

解决:使用错误的方法插入部分。

- (void)addMovement:(Movement *)movement{
    [self.currentWorkout.movements insertObject:movement atIndex:0];
    NSLog(@"%d",(int)[self numberOfSectionsInTableView:self.table]);

    [self.table beginUpdates];
    [self.table insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];
    [self.table endUpdates];
}

删除[self.table beginUpdates];方法调用很重要,否则表会认为它具有在实际添加该对象之前添加对象后将获得的行数。