채팅 앱이있어서 서버에서 기록을 가져오고 하나씩 메시지를 가져 와서 하나의 메시지를 가져 와서 배열에 추가하고 행을 테이블에 추가합니다 ..이 프로세스는 매우 빠릅니다 . 여기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
먼저 앱이 충돌하는 곳을 확인하십시오. - [__ NSArrayM insertObject : atIndex :] : 객체는 변경 가능 배열에 nil을 삽입 할 것을 제안 할 수 없습니다. –
하지만 insertObject :를 사용하지 않았습니다. 내 클래스에서 – Kabali