2017-02-23 6 views
0

В настоящее время я разрабатываю приложение для чата для iOS с использованием XMPPFramework и JSQMessagesViewController, я новичок во всем этом, так что несите меня.Добавить входящее сообщение в ChatViewController collectionview (XMPPFramework + JSQMessagesViewController)

Я получил сервер XMPP и могу видеть отправленное и входящее сообщение через консольный журнал, то, что я пытаюсь сделать, это добавить/отобразить входящее сообщение в пользовательский интерфейс collectionView (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() 
} 

с этим подходом , приложение падает на входящее сообщение, и я получаю неожиданную ошибку значения nil из senderId. Я, похоже, не работаю. сообщите пожалуйста спасибо.

+0

Думаю, вам стоит попробовать пример JSQ от github. В вашем подклассе 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() 
} 

дайте мне знать, если у вас есть больше вопросов.