tableview刷新粉碎线程1:信号SIGABRT

时间:2016-08-24 08:16:35

标签: ios objective-c uitableview

我的应用程序是一个IM应用程序,当应用程序进入后台并再次回到前台时会粉碎。 这是我的代码部分。

-(void)uiAddChatroomMessages:(NSArray*)messages{
    NSMutableArray *indexPaths = [[NSMutableArray alloc]init];
    int i = (short)self.messageArray.count ;
    for (RTIMMessage *msg in messages) {
        [self.messageArray addObject:msg];
    }
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
    [indexPaths addObject:indexPath];
    [self.chatMessageTableView beginUpdates];
    [self.chatMessageTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
    [self.chatMessageTableView endUpdates];
    [self.chatMessageTableView reloadData];
}

运行到此代码“[self.chatMessageTableView endUpdates]”,它粉碎并提示“Thread1:signal SIGABRT”。

  

2016-08-24 15:49:18.500 RTIM_iOS_Demo [1834:1326398] *断言   失败 - [UITableView _endCellAnimationsWithContext:],   /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.12/UITableView.m:1716   2016-08-24 15:49:18.590 RTIM_iOS_Demo [1834:1326398] * 终止   应用程序由于未捕获的异常'NSInternalInconsistencyException',   原因:'无效更新:第0节中的行数无效   更新后现有部分中包含的行数(62)   必须等于之前该部分中包含的行数   更新(57),加上或减去插入或删除的行数   从该部分(插入1,删除0)和加号或减号   移入或移出该部分的行(0移入,0移出)。   ***首先抛出调用堆栈:(0x18238adb0 0x1819eff80 0x18238ac80 0x182d10154 0x1876e1808 0x100072ccc 0x1000728b0 0x100095244   0x10009468c 0x100077d20 0x100241a7c 0x100241a3c 0x1002474e4   0x182340d50 0x18233ebb8 0x182268c50 0x183b50088 0x187552088   0x1000a5340 0x181e068b8)libc ++ abi.dylib:以未捕获的方式终止   NSException类型的异常

3 个答案:

答案 0 :(得分:0)

根据堆栈跟踪,您的索引路径似乎是错误的。您正在使用数组计数作为行索引,尝试使用(数组计数-1),希望它可以工作。

答案 1 :(得分:0)

在您的方法中,您添加了self.messageArray一些新对象,但只添加了一行。将您的代码修改为。

-(void)uiAddChatroomMessages:(NSArray*)messages{
    NSMutableArray *indexPaths = [NSMutableArray array];
    NSUInteger i = self.messageArray.count;
    for (RTIMMessage *msg in messages) {
        [self.messageArray addObject:msg];
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
        [indexPaths addObject:indexPath];
        i ++;
    }

    [self.chatMessageTableView beginUpdates];
    [self.chatMessageTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
    [self.chatMessageTableView endUpdates];
    [self.chatMessageTableView reloadData];
}

答案 2 :(得分:0)

插入后,numberOfRowsInSection返回的号码必须与新的预期值匹配。您可能会返回一个数组的常量或多个元素,这些元素没有发生变化。