2016-09-03 1 views
0

私はチャットアプリを持っており、サーバーからヒストリを取得して、1つずつメッセージを取得するので、メッセージを1つ取り出して配列に追加し、テーブルに行を追加します。このプロセスは非常に高速です。ここで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にクラッシュを取得しています:あなたはmessageContent内のデータを取得している

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を挿入しているとは限りません。 –

+0

しかし、私はクラス内でinsertObject:を使用していませんでした。 – Kabali

答えて

0

チェックでエラーがアレイにnilのオブジェクトを追加していると言うので、 。サーバーからデータを取得する場合は、サーバコールまたはネットワークコールのcompletion handlerからmsgReceviedメソッドを呼び出す必要があります。行を挿入する必要はありません。あなたの配列(データソースとして使用される)に新しいオブジェクトを追加するだけで、relaodテーブルビューの後にcellforrowatindexpathがすべてのものを管理します。

+0

はいreloadDataは機能しますが、メッセージセルをテーブルに追加していないので、しばらく失敗しました。だからこの解決策を考える。 messageContentは私がチェックしたものではありません。 – Kabali

+0

問題が解決しましたか? – Lion

+0

いいえ、私はreloadDataが私の問題を解決することを知っていると言っていますが、ユーザーがテーブルに行を追加していないというメッセージを送信するとエラーが発生する...だから私はテーブルを再ロードするのではなくテーブルに行を挿入するこの解決策を思いつきます – Kabali

関連する問題