Here I see 4 big fat problems with your code.
You are force casting the value of fileUrl
of the dictionary dict
to String
. If your dictionary doesn't have the value for fileUrl
, or if it's not castable to string, your code will crash. You should change that to optional cast like:
if let fileUrl = dict["fileUrl"] as? String
{
//your code if you have fileUrl
}
When creating the url to the file, you are using the wrong initialization method, you should be using this:
let url = URL(fileURLWithPath: fileUrl)
After you have the url to the file, you should also check if you have the data of the file, because contentsOfFile:
initializer of the NSData
returns the optional object, which may be nil
, so another if
check:
if let data = NSData(contentsOf: url) {\\ code with the data}
init?(data: Data)
initializer of the UIImage
also returns optional object, so if the required by latter code, you should also check if you have the image or nil
with if statement.
The result code should be something like:
if let fileUrl = dict["fileUrl"] as? String {
let url = URL(fileURLWithPath: fileUrl)
if let data = NSData(contentsOf: url) {
let image = UIImage(data: data as Data) // you can cast NSData to Data without force or optional casting
let photo = JSQPhotoMediaItem(image: image)
self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photo))
}
}
Hope this helps.