2017-02-07 1 views
1

Sur mon application, l'utilisateur a une photo de profil, s'il est connecté avec Facebook, la photo de profil est définie sur l'image de profil Facebook actuelle. Le problème que j'ai est que si l'utilisateur se connecte à l'application sans Facebook, l'application se bloque en essayant de récupérer les données Facebook. Comment puis-je le rendre sûr si les données de Facebook ne peuvent pas être obtenues, puis l'image de profil peut être définie à vide.Swift 2.3 Crash si le profil Facebook ne peut pas être retourné

lazy var profileImageView: UIImageView = { 


    let user = FIRAuth.auth()?.currentUser 
    let photoUrl = user?.photoURL 
    let data = NSData(contentsOfURL: photoUrl!) 
     let profileView = UIImageView() 
     profileView.image = UIImage(data: data!) 
     profileView.contentMode = .ScaleAspectFill 

     profileView.layer.cornerRadius = 16 
     profileView.layer.masksToBounds = true 

     profileView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView))) 
     profileView.userInteractionEnabled = true 
     return profileView 

}() 
+0

Copie possible de [Qu'est-ce que "erreur fatale: trouvé de manière inattendue nil tout en déballant une valeur facultative" signifie?] (Http://stackoverflow.com/questions/32170456/what-does-fatal-error-un- unexpectedly-found- nil-en-déballant-une-facultatif-valeur) – rmaddy

Répondre

0

Vous essayez de créer un NSData par la force déballant une valeur facultative, dans ce cas photoUrl. Je suppose que si l'utilisateur ne s'est pas connecté avec facebook, cette valeur est nulle.

Ce que vous devez faire est de forcer le déballage du photoURL, vous devriez vérifier s'il est nul en premier. Pour ce faire, vous pouvez utiliser un garde, qui est la méthode recommandée pour vérifier quelque chose

lazy var profileImageView: UIImageView = { 
    let user = FIRAuth.auth()?.currentUser 
    let photoUrl = user?.photoURL 

    guard let photoUrl = user?.photoURL else { 
     return UIImageView() 
     //Here do the cusomization of the blank image before 
     //returning it 
    } 

    let data = NSData(contentsOfURL: photoUrl) 
    let profileView = UIImageView() 
    profileView.image = UIImage(data: data!) 
    profileView.contentMode = .ScaleAspectFill 

    profileView.layer.cornerRadius = 16 
    profileView.layer.masksToBounds = true 

    profileView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView))) 
    profileView.userInteractionEnabled = true 
    return profileView 

}() 

De cette façon, vous savez que le photoURL ne sera pas nul, sinon, il retourner l'image vierge.