2017-02-01 9 views
0

2-3のメッセージを送信した後、My TextViewがフリーズしています。私のiOSバージョンは10.2.1で、テストデバイスはiPhone 6Plus、JSQMessagesViewControllerバージョンは7.3.4、コードはObj-Cです。私は、次のメソッド実装されています:JSQMessagesController textview stuck

-(void)didPressSendButton:(UIButton *)button withMessageText:(NSString *)text senderId:(NSString *)senderId senderDisplayName:(NSString *)senderDisplayName date:(NSDate *)date 
{ 
    [self addMessagewithId:senderId name:senderDisplayName date:date andText:text inArray:_messages inGroup:nil]; 

    NSDateFormatter *dateF = [[NSDateFormatter alloc] init]; 
    dateF.dateFormat= @"yyyy-MM-dd hh:mm:ss zzzz"; 
    NSString *dateStr = [dateF stringFromDate:date]; 

    NSDictionary *mdata = @{@"text": text, @"senderId":senderId, @"displayName": senderDisplayName, @"date":dateStr}; 

    // Push data to Firebase Database 
    [[[_rootRef child:@"messages"] childByAutoId] setValue:mdata]; 

    [self finishSendingMessageAnimated:NO]; 

    _isTyping =false; 
    [self sendIsTyping];  
} 

-(void)addMessagewithId:(NSString*) senderId name:(NSString*) name date:(NSDate*)date andText:(NSString*) text inArray:(NSMutableArray*)array inGroup:(dispatch_group_t)group1 
{ 

    JSQMessage* message = [[JSQMessage alloc] initWithSenderId:senderId senderDisplayName:name date:date text:text]; 

    [array addObject:message]; 

    if (group1) { 
     dispatch_group_leave(group1); 
    } 

} 

をしかし

[self finishSendingMessageAnimated:NO];

を呼び出した後のTextViewは凍結起動し、テキストが終わるところにカーソルがまま。このフリーズ時間は、ユーザーがさらにメッセージを送信するにつれて増加します。助けてください。

+0

あなたが提供した情報はあまりありません。より大きなコードのサンプルを私たちに提供してください。メッセージを送信するたびに大量のデータを送信することに問題があるようですが、それはあなたが提供したコードに基づいて推測されます。もしあなたが私たちにもっと助けてくれるならば。 –

+0

@DanielLeonard質問を編集しました。チェックしてください。 –

+0

だから私は最初にそれがあなたを減速させる火災基地であるかどうかをチェックしてみるでしょう。 '[[_rootRef child:@" messages "] childByAutoId] setValue:mdata];'をコメントアウトして、いくつかのメッセージを送信してください。吊り下げが遅くなければ、あなたの問題はライブラリではなくファイアベースです。それが遅れを取り除かないかどうか私に知らせてください。 –

答えて

0

私のコードでは問題は方法

[[[_rootRef child:@"messages"] childByAutoId] setValue:mdata]; 

it was again reloading all the collectionview as expected from FIRDataEventTypeValue . So I put an array like this : 

[[[_rootRef child:@"messages"] queryOrderedByKey] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 
for (FIRDataSnapshot *child in snapshot.children) { 

        if ([_arrSnap containsObject:child.key]) { 
         return; 
        } 
        else 
        { 
         [_arrSnap addObject:child.key]; 

         //do rest of your coding here 
        } 
} 
} 

を呼び出した後ので、リロードは私collectionviewのために停止し、コードのすべての余分な実行が停止したことでした。

@danielleonardにも感謝します。それは私をこの解決策に導いた。