Где возбуждается исключение? Ни в каком месте кода, который вы разместили, это исключение не может возникнуть, если вы не внедрили собственный метод подсчета. Поэтому я предполагаю, что исключение поднимается в tableView:cellForRowAtIndexPath:
. Внутри этого метода (или любых других подобных методов) убедитесь, что вы используете ту же логику.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section) {
case 0:{
//messageReceive logic
}
break;
case 1:{
//messageSend logic
}
break;
}
}
Следующее, что вы хотите сделать, это убедиться, что messageReceive и messageSend не являются изменяемыми (ваш вывод консоли показывает, что он изменчив). Если они являются свойствами, то они должны быть NSArray и быть настроены на копирование без сохранения (например, @property(nonatomic, copy) NSArray *messageReceive;
в противном случае код должен выглядеть как messageReceive = [sourceArray copy];
Обновление:
В предоставленном вами обновлении показано, что проблема в следующей строке
NSDictionary * dictMessReceive = [self.messageReceive objectAtIndex:indexPath.row];
NSDictionary * dictMessSend = [self.messageSend objectAtIndex:indexPath.row];
Вы не можете получить доступ к обоим массивам с одним и тем же индексом, переместите это в оператор switch
NSDictionary * dictMessReceive = nil;
NSDictionary * dictMessSend = nil;
switch ( indexPath.section )
{
case 0:
dictMessageReceive = [self.messageReceive objectAtIndex:indexPath.row];
//...
break;
case 1:
dictMessSend = [self.messageSend objectAtIndex:indexPath.row];
//...
break;
}