JSQMessagesViewController在IOS中发送按钮错误

时间:2017-10-24 06:02:56

标签: ios swift3 firebase-realtime-database

我已关注使用此链接Raywenlich Firebase Tutorial Real Time Chat

1https://www.raywenderlich.com/140836/firebase-tutorial-real-time-chat-2。为了使用firebase创建聊天,我已经正确地执行了所有过程,但是当我点击发送按钮时它会显示我的错误,

  

由于未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:'错误!要求的方法   没有在子类中实现。需要实施    - [JSQMessagesViewController didPressSendButton:withMessageText:senderId:senderDisplayName:date:]'

这是我发送按钮的代码,

 override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {

    let itemRef = messageRef.childByAutoId() // 1

    let messageItem = [ // 2
        "senderId":Auth.auth().currentUser?.uid,
        "senderName": "Hamza",
        "text": text!,
        ]

    itemRef.setValue(messageItem) // 3

    JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4

    finishSendingMessage() // 5
}

屏幕是这样的, enter image description here

聊天视图控制器类

import UIKit
import Firebase
import FirebaseDatabase

class ChatView: JSQMessagesViewController {

var ref: DatabaseReference!
var messages = [JSQMessage]()
private lazy var messageRef = Database.database().reference().child("messages")
private var newMessageRefHandle: DatabaseHandle?
lazy var outgoingBubbleImageView: JSQMessagesBubbleImage = self.setupOutgoingBubble()
lazy var incomingBubbleImageView: JSQMessagesBubbleImage = self.setupIncomingBubble()


//var senderId: NSString = ""
override func viewDidLoad() {
    super.viewDidLoad()

    senderId = (Auth.auth().currentUser?.uid as NSString?)! as String!


    collectionView!.collectionViewLayout.incomingAvatarViewSize = CGSize.zero
    collectionView!.collectionViewLayout.outgoingAvatarViewSize = CGSize.zero


   // observeMessages()

    // Do any additional setup after loading the view.
}

 override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAt indexPath: IndexPath!) -> JSQMessageData! {
    return messages[indexPath.item]
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return messages.count
}

private func setupOutgoingBubble() -> JSQMessagesBubbleImage {
    let bubbleImageFactory = JSQMessagesBubbleImageFactory()
    return bubbleImageFactory!.outgoingMessagesBubbleImage(with: UIColor.jsq_messageBubbleBlue())
}

private func setupIncomingBubble() -> JSQMessagesBubbleImage {
    let bubbleImageFactory = JSQMessagesBubbleImageFactory()
    return bubbleImageFactory!.incomingMessagesBubbleImage(with: UIColor.jsq_messageBubbleLightGray())
}

override func collectionView(_ collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAt indexPath: IndexPath!) -> JSQMessageAvatarImageDataSource! {
    return nil
}

private func addMessage(withId id: String, name: String, text: String) {
    if let message = JSQMessage(senderId: id, displayName: name, text: text) {
        messages.append(message)
    }
}

override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {

    let itemRef = messageRef.childByAutoId() // 1


    let messageItem = [ // 2
        "senderId":Auth.auth().currentUser?.uid,
        "senderName": "Hamza",
        "text": text!,
        ]

    itemRef.setValue(messageItem) // 3

    JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4

    finishSendingMessage() // 5
}

0 个答案:

没有答案