2017-11-21 8 views
0

의 다른 값을 설정하는 것을 방지하지만 사용자가 프로필 이미지를 건너 뛴 경우 사용자는 인증 및 자신의 이메일을 등록하지만, 중포 기지는 사용자 이름과 이메일을 설정하고 프로필 이미지firebase의 누락 된 값 setValue methode 사용자가 firebase에 사용자를 인증하고 username, email 및 Profile Image와 같은 값을 업로드 할 때

@IBAction func SignUp(_ sender: Any) { 
     if username.text != "", email.text != "", password.text != "", fullname.text != "" { 

      activityIndicator.startAnimating() 

      Auth.auth().createUser(withEmail: email.text!, password: password.text!, completion: { (user, error) in 
       if error != nil { 
        AlertController.showAlert(self, titel: "Error", message:".Fill all fields\n .User do exists\n .Network error ") 
        self.activityIndicator.stopAnimating() 
        return 
       } 
       let uid = user?.uid 
       let storageRef = Storage.storage().reference(forURL: "gs://........com").child("profile_image").child(uid!) 
       if let profileImg = self.selectedImage, let imageData = UIImageJPEGRepresentation(profileImg, 0.1){ 
        storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in 
         if error != nil{ 
          return 
         } 
         let profileImageUrl = metadata?.downloadURL()?.absoluteString 
         let ref = Database.database().reference() 
         let usersReferance = ref.child("users") 
         let newUserReferance = usersReferance.child(self.username.text!).child(uid!) 
         newUserReferance.setValue(["fullname": self.fullname.text, "username": self.username.text, "email": self.email.text, "password": self.password.text, "profileImageUrl": profileImageUrl]) 
        }) 
       } 
       self.dismiss(animated: true, completion: nil) 
       self.activityIndicator.stopAnimating() 
      }) 
} 
} 
} 
을 기각하지 않습니다

답변

0

당신은 이미지 검사기 폐쇄 이외의 다른 필드에 값을 설정해야합니다 또는 selectedImage이 전무 인 경우 그들은 설정하지 않습니다 .

@IBAction func SignUp(_ sender: Any) { 
if username.text != "", email.text != "", password.text != "", fullname.text != "" { 

    activityIndicator.startAnimating() 

    Auth.auth().createUser(withEmail: email.text!, password: password.text!, completion: { (user, error) in 
     if error != nil { 
      AlertController.showAlert(self, titel: "Error", message:".Fill all fields\n .User do exists\n .Network error ") 
      self.activityIndicator.stopAnimating() 
      return 
     } 
     let uid = user?.uid 

     var userValues = [ 
      "fullname": self.fullname.text, 
      "username": self.username.text, 
      "email": self.email.text, 
      "password": self.password.text 
     ] 

     let storageRef = Storage.storage().reference(forURL: "gs://........com").child("profile_image").child(uid!) 
     if let profileImg = self.selectedImage, let imageData = UIImageJPEGRepresentation(profileImg, 0.1){ 
      storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in 
       if error != nil{ 
        return 
       } 
       let profileImageUrl = metadata?.downloadURL()?.absoluteString 
       userValues["profileImageUrl"] = profileImageUrl 

       setData(userValues, uid!) 
      }) 
     } else { 
      setData(userValues, uid!) 
     } 



     self.dismiss(animated: true, completion: nil) 
     self.activityIndicator.stopAnimating() 
    }) 
} 
} 

func setData(_ data: [String: Any], uid: Int) { 
    let ref = Database.database().reference() 
    let usersReferance = ref.child("users") 
    let newUserReferance = usersReferance.child(data["username"]).child(uid) 
    newUserReferance.setValue(data) 
} 

이미지의 putData가 비동기 적이기 때문에 데이터를 저장하는 기능을 사용해야합니다.

+0

나는 이것이 올바른 방법이라고 생각하지 않는다. 홀 코드를 분리하고 func를 작성한다. – mazenqp

+0

self.selectedImage가 nil 인 경우 코드가 실행되지 않도록 "if let"이미지 내에 값을 설정한다. – EmilioK

+0

userValues? 너 내가 설정 한 것을 의미합니까 ?? 귀하의 방법을 시도했지만 일부 오류가 PF 이미지를 선택한 사용자가 강제로이 문제가 전달됩니다. – mazenqp