将传入消息附加到 ChatViewController 集合视图(XMPPFramework+JSQMessagesViewController)

Posted

技术标签:

【中文标题】将传入消息附加到 ChatViewController 集合视图(XMPPFramework+JSQMessagesViewController)【英文标题】:Append incoming message to ChatViewController collectionview (XMPPFramework+JSQMessagesViewController) 【发布时间】:2017-02-23 04:15:13 【问题描述】:

我目前正在使用 XMPPFramework 和 JSQMessagesViewController 为 ios 开发一个聊天应用程序,我是新手,所以请耐心等待。

我启动并运行了 XMPP 服务器,我可以通过控制台日志查看发送和传入的消息,我正在尝试将传入消息附加/显示到 collectionView UI (JSQMessagesViewController)。

到目前为止,我所做的是从应用程序委托调用 viewcontroller func 这是传入消息的应用程序委托中的代码

func xmppStream(_ sender: XMPPStream!, didReceive message: XMPPMessage!) 
    print("Did received message \(message)")
    if message.isChatMessageWithBody() 
      chatView.receiveMessage(passMessage: message.stringValue)
    

ViewController 方法

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 值错误。 我似乎无法解决这个问题。 请指教 谢谢。

【问题讨论】:

我认为你应该试试 github 上的 JSQ 示例。您需要在 jsqmessagesviewcontroller 子类中实现一些委托方法。 【参考方案1】:

是的,问题是您尚未使用所有必需的委托方法设置您的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()

如果您还有其他问题,请告诉我。 ??

【讨论】:

以上是关于将传入消息附加到 ChatViewController 集合视图(XMPPFramework+JSQMessagesViewController)的主要内容,如果未能解决你的问题,请参考以下文章

使用浏览按钮将文件附加到 Mandrill 消息

python MIME将多个附件附加到多部分消息

如何使用 Microsoft Bot Framework 将文件附加到消息?

如何将许多不和谐嵌入附加到一条消息中?

如何将传入消息映射到 Azure Eventhub 中的使用者组

TypeError:“方法”类型的对象没有 len() |试图将文件附加到电子邮件消息