Lorsque j'appuie sur le bouton d'inscription sans télécharger d'image, je reçois un plantage. Si je télécharge une photo sans remplir le reste de textFields, je reçois une alerte contextuelle. Comment puis-je obtenir la même alerte lorsqu'aucune photo n'est téléchargée? L'erreur que je reçois estÉcrasement lorsqu'aucune image n'est téléchargée vers Firebase
erreur fatale: de façon inattendue trouvé nulle en déballant une valeur facultative
@IBAction func signUpAction(_ sender: Any) {
let email = emailTextField.text!.lowercased()
let finalEmail = email.trimmingCharacters(in: .whitespacesAndNewlines)
let location = locationTextField.text!
let biography = biographyTextField.text!
let username = usernameTextField.text!
let password = passwordTextField.text!
let firstLastName = firstLastNameTextField.text!
let pictureData = UIImageJPEGRepresentation(self.userImageView.image!, 0.70)
if finalEmail.isEmpty || location.isEmpty || biography.isEmpty || username.isEmpty || password.isEmpty {
self.view.endEditing(true)
let alertController = UIAlertController(title: "OOPS", message: " You must fill all the fields", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
present(alertController, animated: true, completion: nil)
}else {
self.view.endEditing(true)
authService.signUP(username: username, email: finalEmail, location: location, biography: biography, password: password, pictureData: pictureData as NSData!)
}
}
var authService = AuthService()
struct AuthService{
var dataBaseRef: DatabaseReference!{
return Database.database().reference()
}
var storageRef: StorageReference!{
return Storage.storage().reference()
}
func signUP(username: String, email: String, location: String, biography: String, password: String, pictureData: NSData!) {
Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
if error == nil{
self.setUserInfo(user: user, username: username, location: location, biography: biography, password: password, pictureData: pictureData)
}else{
print(error?.localizedDescription)
}
}
}
private func setUserInfo(user: User!, username: String, location: String, biography: String, password: String, pictureData: NSData!){
let imagePath = "profileImage\(user.uid)/userPic.jpg"
let imageRef = storageRef.child(imagePath)
let metaData = StorageMetadata()
metaData.contentType = "image/jpeg"
imageRef.putData(pictureData as Data, metadata: metaData){(newMetaData, error)
in
if error == nil{
let changeRequest = user.createProfileChangeRequest()
changeRequest.displayName = username
if let photoURL = newMetaData!.downloadURL(){
changeRequest.photoURL = photoURL
}
changeRequest.commitChanges(completion: { (error) in
if error == nil{
self.saveUserInfo(user: user, username: username, location: location, biography: biography, password: password)
print("user info set")
}else{
print(error?.localizedDescription)
}
})
}else{
print(error?.localizedDescription)
}
}
}
private func saveUserInfo(user: User!, username: String, location: String, biography: String, password: String){
let userInfo = ["email": user.email!, "username": username, "location": location, "biography": biography, "uid": user.uid, "photoURL": String(describing: user.photoURL!)]
let userRef = dataBaseRef.child("users").child(user.uid)
userRef.setValue(userInfo) { (error, ref) in
if error == nil{
print("USER SAVED")
self.logIn(email: user.email!, password: password)
}else{
print(error?.localizedDescription)
}
}
}
func logIn(email: String, password: String){
Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
if error == nil {
if let user = user {
print("\(user.displayName!) has been signed in")
let appDel : AppDelegate = UIApplication.shared.delegate as! AppDelegate
appDel.logUser()
}else{
print(error?.localizedDescription)
}
}
}
}
}
Essayez d'ajouter cette condition '|| pictureData == nil' après '|| password.isEmpty' dans 'if' statement.Also je voudrais vous suggérer d'apporter des modifications dans votre code et essayer de supprimer'! 'de votre code et utiliser des instructions' if 'ou 'guard' dans votre code pour dérouler en toute sécurité vos options – 3stud1ant3
encore obtenir la même erreur après avoir ajouté || pictureData == nil to my if – user8000557