2016-08-06 15 views
1

swiftfirebaseを使ってチャットアプリを構築しようとしていますが、このエラーが発生しました:次のコードを参考にしてください。 JSQMessageViewControllerも使用しています。'NSURL.Type'型の値を期待される引数型 'NSURL?'に変換できません。

func sendMedia(picture: UIImage?, video: NSURL?) { 
    print(picture) 
    print(FIRStorage.storage().reference()) 
    if let picture = picture { 
     let filePath = "\(FIRAuth.auth()!.currentUser?.uid)/\(NSDate.timeIntervalSinceReferenceDate())" 
     print(filePath) 
     let data = UIImageJPEGRepresentation(picture, 0.1) 
     let metadata = FIRStorageMetadata() 
     metadata.contentType = "image/jpg" 
     FIRStorage.storage().reference().child(filePath).putData(data!, metadata: metadata) { (metadata, error) in 
      if error != nil { 
       print(error?.localizedDescription) 
       return 
      } 
      let fileUrl = metadata!.downloadURLs![0].absoluteString 
      let newMessage = self.messageRef.childByAutoId() 
      let messageData = ["fileUrl": fileUrl, "senderId": self.senderId, "senderName": self.senderDisplayName, "MediaType": "PHOTO"] 
      newMessage.setValue(messageData) 
     } 
    }else if let video = video { 
     let filePath = "\(FIRAuth.auth()!.currentUser?.uid)/\(NSDate.timeIntervalSinceReferenceDate())" 
     print(filePath) 
     let data = NSData(contentsOfURL: video) 
     let metadata = FIRStorageMetadata() 
     metadata.contentType = "video/mp4" 
     FIRStorage.storage().reference().child(filePath).putData(data!, metadata: metadata) { (metadata, error) in 
      if error != nil { 
       print(error?.localizedDescription) 
       return 
      } 
      let fileUrl = metadata!.downloadURLs![0].absoluteString 
      let newMessage = self.messageRef.childByAutoId() 
      let messageData = ["fileUrl": fileUrl, "senderId": self.senderId, "senderName": self.senderDisplayName, "MediaType": "VIDEO"] 
      newMessage.setValue(messageData) 
     } 

    } 
} 

} 

extension ChatViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
     print("Did finish picking") 
     //get the image 
     print(info) 
     if let picture = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      let photo = JSQPhotoMediaItem(image: picture) 
      messages.append(JSQMessage(senderId: senderId, displayName: senderDisplayName, media: photo)) 
      sendMedia(picture, video: nil) 
     } 
     else if let video = info[UIImagePickerControllerMediaURL] as? NSURL { 
      let videoItem = JSQVideoMediaItem(fileURL: video, isReadyToPlay: true) 
      messages.append(JSQMessage(senderId: senderId, displayName: senderDisplayName, media: videoItem)) 
      sendMedia(nil, video: NSURL) 
     } 
     self.dismissViewControllerAnimated(true, completion: nil) 
     collectionView.reloadData() 
    } 
} 

エラーがタイプNSURlである場合、私はそれを修正する方法を見つけることができません。この行で

答えて

1

sendMedia(nil, video: NSURL) 

あなたは二番目のパラメータvideoとしてNSURL渡しています。 (video:だけでパラメータラベルであることを忘れないでください。)

をたぶんあなたのようにそれを記述する必要があります。それが動作するようになりまし

sendMedia(nil, video: video) 
+0

ありがとう! –

関連する問題