UITableView insertRowsAtIndexPaths错误

时间:2012-02-28 09:30:43

标签: iphone uitableview rows assertion

我查看了几乎所有的搜索结果,但我的错误并没有消失。我有一个表视图初始化为2个部分和每个1行(从一个数组)。我有一个用于节标题视图的按钮。单击按钮时,我想在第1部分添加一行。这是代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [arr count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    UITableViewCell *cell = (UITableViewCell*)[self.myTableView dequeueReusableCellWithIdentifier:@"DetailCell"];
    cell.textLabel.text=[arr objectAtIndex:indexPath.row];
    cell.backgroundColor=[UIColor clearColor];
    return cell; 
} 

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    switch (section) {
        case 0:
            btnReleases=[UIButton buttonWithType:UIButtonTypeCustom];
            [btnReleases setFrame:CGRectMake(10, 0, 30, 39)];
            [btnReleases setImage:[UIImage imageNamed:@"buttonr.png"] forState:UIControlStateNormal];
            [btnReleases addTarget:self action:@selector(loadReleases) forControlEvents:UIControlEventTouchUpInside];
            return btnReleases;
            break;
        case 1:
            btnLinks=[UIButton buttonWithType:UIButtonTypeCustom];
            [btnLinks setFrame:CGRectMake(10, 0, 30, 39)];
            [btnLinks setImage:[UIImage imageNamed:@"buttonl.png"] forState:UIControlStateNormal];
            [btnLinks addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
            return btnLinks;
            break;
        default:
            break;
    }

}
-(void)loadReleases
{

    [self.myTableView beginUpdates];
        [arr addObject:@"WTF"];
    NSArray *insert0 = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]; NSLog(@"%@",insert0);
    [self.myTableView insertRowsAtIndexPaths:insert0 withRowAnimation:UITableViewRowAnimationBottom];
    [self.myTableView endUpdates];
}

继承错误:

  

* 断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-1912.3 / UITableView.m:1046

2 个答案:

答案 0 :(得分:2)

由于您使用[arr count]作为tableView:numberOfRowsInSection:的返回值,因此在beginUpdates…endUpdates块的末尾,tableView期望每个tableView中都有两行部分,但您对insertRowsAtIndexPaths:的调用仅表示行正在到第0部分。

您需要修复tableView:numberOfRowsInSection:以返回不同的值,具体取决于以下部分:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == 0) {
        return [arr count];
    } else {
        return 1;
    }
}

请注意,你的tableView上有很多可疑的东西:你有两个部分,但是你在每个部分都显示了相同的第0行。你的部分中的插入行为是非常难以理解的:你开始只显示一行,对应于switch中的情况0,然后你表明你在第0行插入一行,之后你将会在第0行显示案例0行,在第1行显示案例1行。所以你应该在第1行而不是第0行插入一行:

NSArray *insert0 = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:0]]; 
[self.myTableView insertRowsAtIndexPaths:insert0 withRowAnimation:UITableViewRowAnimationBottom];

答案 1 :(得分:0)

尝试以下代码

NSIndexPath *indexpath_add = [NSIndexPath indexPathForRow:0 inSection:0];
     [[self myTableView] beginUpdates];
     [[self myTableView]  deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexpath_add] withRowAnimation:UITableViewRowAnimationRight];
     [[self myTableView] endUpdates];