2017-08-17 4 views
0

J'essaie de terminer ma page de connexion pour une application de médias sociaux et j'ai une erreur que je n'arrive pas à comprendre.Initialisation pour une erreur de liaison conditionnelle lors de la tentative de création de connexion

Voici le code complet:

import UIKit 
import Firebase 
import FirebaseAuth 
import FirebaseStorage 
import FirebaseDatabase 
import SwiftKeychainWrapper 

class UserVC: UIViewController, UIImagePickerControllerDelegate, 
UINavigationControllerDelegate 

{ 

@IBOutlet weak var userImagePicker: UIButton! 
@IBOutlet weak var CompleteSignInBtn: UIButton! 
@IBOutlet weak var usernameField: UITextField! 
var userUid: String! 
var emailField: String! 
var passwordField: String! 
var imagePicker : UIImagePickerController! 
var imageSelected = false 
var username: String! 


override func viewDidLoad(){ 
    super.viewDidLoad() 

imagePicker = UIImagePickerController() 
imagePicker.delegate = self 
imagePicker.allowsEditing = true 
} 

func keychain(){ 
    KeychainWrapper.standard.set(userUid, forKey: "uid") 
} 
func imagePickerController(_ picker: UIImagePickerController, 
    didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let image = info[UIImagePickerControllerEditedImage] as? UIImage { 
     userImagePicker.setImage(image,for:.normal) 
     imageSelected = true 
    } else { 
     print("Image was not selected") 
    } 
    imagePicker.dismiss(animated: true, completion: nil) 
} 

func setUpUser(img: String){ 
    let userData = [ 

     "username": username!, 
     "userImg": img 
    ] 
    keychain() 
    let setLocation = Database.database().reference().child(userUid) 
    setLocation.setValue(userData) 
} 


func uploadImg() { 

    if usernameField.text == nil { 
     print("Please choose a username") 
     CompleteSignInBtn.isEnabled = false 
    } else { 
     username = usernameField.text 
     CompleteSignInBtn.isEnabled = true 
    } 

     guard let img = userImagePicker.image, imageSelected == true else { 

     print("image must be selected") 

     return 
    } 


    if let imgData = UIImageJPEGRepresentation(img, 0.2){ 
     let imgUid = NSUUID().uuidString 
     let metadata = StorageMetadata() 
     metadata.contentType = "img/jpeg" 

     Storage().reference().child(imgUid).put(imgData, metadata: metadata) { (metadata, error) in 
      if error =! nil { 
       print("Did not upload") 
      } else{ 
       print("Uploaded") 
       let downloadURl = metadata?.downloadURL()?.absoluteString 
       if let url = downloadURl { 
        self.setUpUser(img: url) 
       } 
      } 
     } 

    } 
    } 



@IBAction func completeAccount(_ sender: Any){ 
    Auth.auth().createUser(withEmail: emailField, password: passwordField, completion: { (user, error) in 
     if error != nil { 
      print("Error\(error)") 
     } else { 
      if let user = user { 
       self.userUid = user.uid 
      } 
     } 
     self.uploadImg() 
    }) 
    dismiss(animated: true, completion: nil) 

} 


@IBAction func seletedImagePicker(_ sender: Any){ 
    present(imagePicker, animated: true, completion: nil) 
} 

@IBAction func cancel(_ sender: AnyObject){ 
    dismiss(animated: true, completion: nil) 
    } 
} 

Le code qui est à l'origine de l'erreur mentionné dans le titre est la suivante:

guard let img = userImagePicker.image, imageSelected == true else { 

     print("image must be selected") 

     return 
    } 

Je ne sais pas quoi faire. J'ai lu que cela a quelque chose à voir avec le fait que userimagePicker.image pourrait ne pas être optionnel, mais dans un guide que je suis, cela fonctionne.

Merci!

+0

Quelle est l'erreur? –

+0

[Modifier] votre question avec l'erreur complète et exacte. – rmaddy

+0

Je suppose que vous essayez de garder laisser la valeur non facultative. Vous utilisez déjà! avec variables signifie que vous avez une variable qui n'est pas optionnelle. –

Répondre

0

Vous avez déclaré que userImagePickerUIButton et UIButton n'a pas de propriété appelée image. Vous devez utiliser currentImage

guard let img = userImagePicker.currentImage, imageSelected == true else { 
    print("image must be selected") 
    return 
} 
+0

'imageSelected == true' == true est redondant –

+0

@LeoDabus, je vois, mais je ne l'ai pas écrit, je viens d'éditer la partie qui était erronée. –

+0

Merci! Cela l'a réparé. – user8480321