我的应用程序是一个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类型的异常
答案 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
返回的号码必须与新的预期值匹配。您可能会返回一个数组的常量或多个元素,这些元素没有发生变化。