将传入消息追加到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值错误。 我似乎无法解决这个问题。 请告知 谢谢。

+0

我认为你应该尝试从github的JSQ例子。您需要在jsqmessagesviewcontroller子类中实现一些委托方法。 – dichen

是的问题是你没有设置你的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() 
} 

让我知道你是否有更多问题。