2016-08-06 38 views
1

Ich versuche, eine Chat-App mit swift mit firebase zu bauen und bekomme diesen Fehler: Heres der Code unten: Ich kann immer noch nicht verstehen, was los ist !! Verwenden Sie auch JSQMessageViewController.Wert des Typs 'NSURL.Type' kann nicht in den erwarteten Argumenttyp 'NSURL?' Konvertiert werden

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

Wenn der Fehler mit der Art von NSURl ist, kann ich nicht herausfinden, wie es zu beheben ist.

Antwort

1

In dieser Zeile:

sendMedia(nil, video: NSURL) 

Sie NSURL als zweiten Parameter video sind vorbei. es funktioniert jetzt

sendMedia(nil, video: video) 
+0

Danke: (. Denken Sie daran, video: ist nur ein Parameter label)

Vielleicht müssen Sie es als schreiben! –