UITableView行插入崩溃

时间:2013-01-25 15:53:57

标签: iphone ios objective-c uitableview

我尝试将行/单元格添加到tableview中,但在[table endUpdates]之前; ...应用崩溃错误:

*断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit / UIKit-2372 / UITableView.m:909 * 因未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'尝试将第33行插入第0部分,但更新后第0部分只有33行?

-(IBAction)createTask
{
    Data  *sharedManager = [Data sharedManager]; //singleton class
    [Table  beginUpdates];

    [Table insertRowsAtIndexPaths:[NSArray arrayWithObject:
                                          [NSIndexPath indexPathForItem: 
                                                [sharedManager._NAME count] inSection:0]] 
                                          withRowAnimation:UITableViewRowAnimationNone];

     // sharedManager._NAME is NSMutableArray wich consists names for cells
    [Task_handler createTask]; // adds objects to NSMutableArray's 
                               // (like names for cels and so on)

    [Table  endUpdates];
    [Table reloadData];

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    Data  *sharedManager = [Data sharedManager];
    NSLog(@"numberOfRowsInSection : %d",[sharedManager._NAME count]);

    return [sharedManager._NAME count];
}

提前谢谢。

3 个答案:

答案 0 :(得分:1)

这个怎么样:

-(IBAction)createTask
{
    Data  *sharedManager = [Data sharedManager]; //singleton class
    [Table  beginUpdates];
    [Table insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForItem: [sharedManager._NAME count]+1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
    [Task_handler createTask]; //adds objects to NSMutableArray's (like names for cels and so on)
    [Table reloadData];
    [Table  endUpdates];
}

答案 1 :(得分:1)

向表中添加行时,需要让TableView知道它有更多要管理的单元格。在使用insertRowsAtIndexPaths:之前,您需要运行[TaskHandler createTask]方法,该方法将创建数据源数组的对象。该数组应该是一个由TableView委托方法numberOfRowsInSection:计算的实例变量。

答案 2 :(得分:-2)

通过将代码更改为:

解决了崩溃问题
Data  *sharedManager = [Data sharedManager];
[Table  beginUpdates];
[Table insertRowsAtIndexPaths:[NSArray arrayWithObject:
                                          [NSIndexPath indexPathForItem: 
                                                [sharedManager._NAME count] inSection:0]] 
                                      withRowAnimation:UITableViewRowAnimationNone];
[Task_handler createTask];
[Table  endUpdates];