将传入消息追加到ChatViewController collectionview(XMPPFramework + JSQMessagesViewController)
问题描述:
我目前正在为iOS开发一个使用XMPPFramework和JSQMessagesViewController的聊天应用程序,我对所有这些都很陌生,所以请耐心等待。将传入消息追加到ChatViewController collectionview(XMPPFramework + JSQMessagesViewController)
我得到了XMPP服务器启动并运行,我可以看到通过控制台日志发送和传入消息,我试图做的是将传入消息追加/显示到collectionView UI(JSQMessagesViewController)。
到目前为止,我所做的就是调用从应用程序的委托 一个视图 - 控制FUNC这里是在应用程序委托的代码输入的消息
func xmppStream(_ sender: XMPPStream!, didReceive message: XMPPMessage!) {
print("Did received message \(message)")
if message.isChatMessageWithBody() {
chatView.receiveMessage(passMessage: message.stringValue)
}
}
的视图控制器方法
func receiveMessage(passMessage: String!) {
let receivedMessage = JSQMessage(senderId: senderId, displayName: senderDisplayName, text: passMessage)
self.messages.append(receivedMessage!)
self.finishReceivingMessage(animated: true)
JSQSystemSoundPlayer.jsq_playMessageReceivedSound()
}
这种方法,应用程序在收到消息时崩溃,并且我从senderId获得意外的nil值错误。 我似乎无法解决这个问题。 请告知 谢谢。
答
是的问题是你没有设置你的JSQMessagesViewController
及其所需的所有委托方法。我会检查出this link是为了让你获得JSQ工作所必须做的事情。
此外,我想提醒力量展开自选(这是你的变量之后使用!
),所以我建议改变这一点:
func receiveMessage(passMessage: String!) {
let receivedMessage = JSQMessage(senderId: senderId, displayName: senderDisplayName, text: passMessage)
self.messages.append(receivedMessage!)
self.finishReceivingMessage(animated: true)
JSQSystemSoundPlayer.jsq_playMessageReceivedSound()
}
要更多的东西是这样的:
func receiveMessage(passMessage: String) {
guard let receivedMessage = JSQMessage(senderId: senderId, displayName: senderDisplayName, text: passMessage) else {
AssertionFailure("Could not get message")
return
}
self.messages.append(receivedMessage)
self.finishReceivingMessage(animated: true)
JSQSystemSoundPlayer.jsq_playMessageReceivedSound()
}
让我知道你是否有更多问题。
我认为你应该尝试从github的JSQ例子。您需要在jsqmessagesviewcontroller子类中实现一些委托方法。 – dichen