简体   繁体   English

为什么当我在JSQMessagesViewController中按下发送按钮时出现2条消息

[英]Why do 2 messages appear when I press the send button in JSQMessagesViewController

Here is my didpresssend logic - 2 messages appear in the view, but when the page is refreshed, there is actually only 1 message in my message array. 这是我的didpresssend逻辑-视图中显示2条消息,但是刷新页面时,我的消息数组中实际上只有1条消息。

- (void)didPressSendButton:(UIButton *)button withMessageText:(NSString *)text senderId:(NSString *)senderId senderDisplayName:(NSString *)senderDisplayName date:(NSDate *)date {

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

    NSDictionary *firebaseMessage = @{@"avatar":self.avatarURL,@"handle":senderDisplayName,@"message":text,@"profileId":self.profID,@"timestamp":[self getTimestamp]};
    [[self.threadRef childByAutoId] setValue:firebaseMessage withCompletionBlock:^(NSError * _Nullable error, FIRDatabaseReference * _Nonnull ref) {
        if (!error) {
            [self.messages addObject:message];
            [self finishSendingMessageAnimated:YES];
            [self sendToServer:text];
        } else {
            //Message Failed
        }
    }];
}

It has something to do with the action being performed asyncronously - for now, I can post the message immediately, then remove the message later if the Firebase operation fails: 它与异步执行的操作有关-现在,我可以立即发布消息,然后在Firebase操作失败的情况下稍后删除消息:

But does anybody know why this happens? 但是有人知道为什么会这样吗? is it something to do with how JSQMessage data source works? 这与JSQMessage数据源的工作方式有关吗?

- (void)didPressSendButton:(UIButton *)button withMessageText:(NSString *)text senderId:(NSString *)senderId senderDisplayName:(NSString *)senderDisplayName date:(NSDate *)date {

    JSQMessage *message = [[JSQMessage alloc] initWithSenderId:senderId senderDisplayName:senderDisplayName date:date text:text];
    [self.messages addObject:message];
    [self finishSendingMessageAnimated:YES];

    NSDictionary *firebaseMessage = @{@"avatar":self.avatarURL,@"handle":senderDisplayName,@"message":text,@"profileId":self.profID,@"timestamp":[self getTimestamp]};
    [[self.threadRef childByAutoId] setValue:firebaseMessage withCompletionBlock:^(NSError * _Nullable error, FIRDatabaseReference * _Nonnull ref) {
        if (!error) {
            [self sendToServer:text];
        } else {
            //Message Failed
            [self.messages removeObject:message];
            [self.collectionView reloadData];
        }
    }];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当按下UISearchbar上的“取消”按钮时,为什么会出现UIKeyboard? - Why does UIKeyboard appear when press cancel button on UISearchbar? 使用JSQMessagesViewController时,UI不会出现 - When Using JSQMessagesViewController the UI does not appear JSQMessagesViewController更改发送按钮textview占位符的语言 - JSQMessagesViewController change language for send button textview placeholder 为什么需要按两次此按钮才能显示数据? - Why do I need to press this button twice to display the data? 按下完成按钮时如何添加标记? - How do I add a marker when I press the done button? 在UISplitviewCOntroller中将JSQMessagesViewController用作detailView时,KeyBoardToolBar只需要出现在DetailViewController中 - When using JSQMessagesViewController as detailView in UISplitviewCOntroller, KeyBoardToolBar needs to appear in DetailViewController only 如何在 JSQMessagesViewController 中居中消息气泡 - How do I center a message bubble in JSQMessagesViewController 删除消息JSQMessagesViewController - Delete messages JSQMessagesViewController 在JSQMessagesViewController上弹出键盘时,“文本字段/发送”按钮消失 - Text Field/Send button disappears on keyboard pop on JSQMessagesViewController 为什么我无法按下 iOS 上的按钮? - Why am I not able to press the button on iOS?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM