2017-02-01 3 views
0

My TextView замерзает после отправки 2-3 сообщений. Моя версия 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

Итак, я сначала проверил бы и посмотрю, не замедлила ли вас это firebase. Просто закомментируйте '[[[_rootRef child: @" messages "] childByAutoId] setValue: mdata];' и отправьте пару сообщений. Если нет замедления подвески, то ваша проблема - это firebase, а не библиотека. сообщите мне, если эта доза не устранит задержку. –

ответ

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 за его ответ. Это привело меня к этому решению.