2017-02-23 35 views
0

我目前正在爲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

回答

0

是的問題是你沒有設置你的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() 
} 

讓我知道你是否有更多問題。

相關問題