2017-02-23 9 views
0

私は現在、XMPPFrameworkとJSQMessagesViewControllerを使用してiOS用のチャットアプリケーションを開発しています。ChatViewController collectionview(XMPPFramework + JSQMessagesViewController)に着信メッセージを追加します。

私はXMPPサーバを稼働させてコンソールログから送受信されたメッセージを見ることができます。コレクションビューUI(JSQMessagesViewController)に着信メッセージを追加/表示することを試みています。私はこれまで何

は、ここでは、着信メッセージ

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() 
} 

用アプリデリゲートのコードだアプリデリゲート からのViewController funcを呼び出しました受信メッセージでアプリケーションがクラッシュし、senderIdから予期しないnil値のエラーが発生します。 これはうまくいかないようです。 助けてください ありがとうございます。

+0

githubからJSQの例を試してみるべきだと思います。 jsqmessagesviewcontrollerサブクラスに実装する必要があるデリゲートメソッドがいくつかあります。 – dichen

答えて

0

はい、問題は、JSQMessagesViewControllerに必要なすべての委任方法を設定していないことです。私は、あなたがJSQを動かすために何をしなければならないのかを最小限にするためにthis linkをチェックします。

また、私は(あなたが変数の後!を使用するところである)optionalsをアンラップ力を警告でしょうだから私はこれを変更することをお勧め:

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() 
} 

ご質問がある場合はお知らせください。

関連する問題