2016-09-03 2 views
0

У меня есть приложение для чата, я получаю историю с сервера и получаю это сообщение один за другим, поэтому я получаю одно сообщение и добавляю его в массив и вставляю строку в таблицу .. и этот процесс очень быстрый ,Crash on insertRowsAtIndexPaths

Вот код:

-(void)msgRecevied:(NSMutableDictionary *)messageContent 
{ 
     if([chatWithUser isEqualToString:[messageContent objectForKey:kReceiver_User]]) 
      return; 

     NSString *m = [messageContent objectForKey:kMsg]; 
     [messageContent setObject:[m substituteEmoticons] forKey:kMsg]; 
     [messageContent setObject:[messageContent objectForKey:kTrnDate] forKey:kTrnDate]; 
     [messageContent setObject:[messageContent objectForKey:kSender_User] forKey:kSender_User]; 
     [messageContent setObject:[messageContent objectForKey:kReceiver_User] forKey:kReceiver_User]; 

     NSMutableDictionary *arrayTemp1 = [messageContent mutableCopy]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 


      [app.Glb.arrayChat addObject:arrayTemp1]; 
      numberOfRows = app.Glb.arrayChat.count; 

      if([app.Glb.arrayChat count] > 0) 
      { 

       [self.tblChatting beginUpdates]; 
       NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:[app.Glb.arrayChat count]-1 inSection:0]; 
       [self.tblChatting insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationNone]; 
       [self.tblChatting endUpdates]; 

       [self.tblChatting scrollToRowAtIndexPath:newIndexPath 
             atScrollPosition:UITableViewScrollPositionBottom 
               animated:YES]; 
       newIndexPath = nil; 
      } 
     }); 
} 

, но я получаю сбою endUpdates что:

2016-09-03 10:47:32.638 [313:50270] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 
*** First throw call stack: 
(0x2379f98b 0x22f3ae17 0x236b4e1f 0x2804372b 0x27d43a19 0x27d5aaa3 0x27f1a741 0x27efe987 0x7e93b 0x7a7b7f 0x7a7b6b 0x7ac655 0x23761bdd 0x237600d7 0x236af2e9 0x236af0d5 0x24c9fac9 0x27d740b9 0x39424d 0x23357873) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

сначала проверьте, где находится ваше приложение. - [__ NSArrayM insertObject: atIndex:]: объект не может быть nil предположить, что вы вставляете нуль в свой Mutable Array. –

+0

, но я не использовал insertObject: в моем классе – Kabali

ответ

0

проверить, что вы получаете данные в messageContent, потому что ошибка говорит, что вы добавляете объект всухую в массив , Если вы получаете данные с сервера, тогда вы должны вызвать метод msgRecevied из completion handler вашего вызова сервера или сетевого вызова. во-вторых, вам не нужно вставлять строки. просто добавьте новые объекты в свой массив (который используется как источник данных) и просто relaod tableview после этого, так что cellforrowatindexpath будет управлять всеми вещами.

+0

yes reloadData работает, но ему не удалось некоторое время, чтобы он не добавлял ячейку сообщения в таблицу. поэтому придумайте это решение. и messageContent не является нил, который я проверил. – Kabali

+0

так проблема решена? – Lion

+0

Нет, я говорю, что знаю, что reloadData решает мою проблему, но он получает ошибку, когда пользователь отправляет сообщение, что таблица времени не добавляет строку в таблицу ... поэтому я придумал это решение, которое вставляет строку в таблицу вместо перезагрузки таблицы – Kabali