2016-08-24 3 views
1

Мое приложение - приложение для обмена мгновенными сообщениями, когда приложение в фоновом режиме и еще раз обратно на передний план раздавит. Это моя часть кодаtableview refresh crush Thread1: сигнал SIGABRT

-(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]; 
} 

Run для этого кода «[self.chatMessageTableView endUpdates]», это раздавить и быстрое «Резьба1: сигнал 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', причины: «Invalid обновления : недопустимое количество строк в разделе 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

** Никогда ** не вызывайте 'reloadData' сразу после' insertRowsAtIndexPaths'. Метод вставки автоматически перестраивает вид таблицы. – vadian

ответ

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]; 
} 
+0

Большое спасибо! – shycie

0

Согласно трассировке стека, кажется, что ваш указательный путь неверен. Вы используете подсчет массива в качестве индекса строки, попробуйте (массив count-1), надейтесь, что он сработает.

0

После установки вам номер возвращенного numberOfRowsInSection должны совпадать с новым ожидаемым значением. Возможно, вы возвращаете константу или несколько элементов массива, который не изменился.

Смежные вопросы