我已关注使用此链接Raywenlich Firebase Tutorial Real Time Chat
1:https://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
}
聊天视图控制器类
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
}