Search code examples
swiftjsqmessagesviewcontroller

Cannot convert value of type 'JSQPhotoMediaItem?' to expected argument type 'String?'


I'm trying to implement JSQMessageViewController with Firebase in Xcode (Swift).

I get an error: Cannot convert value of type 'JSQPhotoMediaItem?' to expected argument type 'String?' from this code below:

func observeMessages() {
    messageRef.observe(.childAdded) { (snapshot) in
        //print(snapshot.value)
        if let dict = snapshot.value as? [String: AnyObject] {
            let mediaType = dict["MediaType"] as! String
            let senderId = dict["senderId"] as! String
            let senderName = dict["senderName"] as! String

            switch mediaType {

            case "TEXT":
                let text = dict["text"] as! String
                self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, text: text))
            case "PHOTO":
                let fileUrl = dict["fileUrl"] as! String
                let url = NSURL(string: fileUrl)
                let data = NSData(contentsOf: url! as URL)
                let picture = UIImage(data: data! as Data)
                let photo = JSQPhotoMediaItem(image: picture)
                self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, text: photo))

            default:
                print("unknown data type")
            }
            self.collectionView.reloadData()
        }
    }
}

Solution

  • You should change text to media in the initializer of JSQMessage:

    self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photo))
    

    FYI, JSQMessagesViewController is deprecated. See this blog post for more information.