2017-09-23 4 views
3
var img: UIImage! 

if self.profileImg.image == #imageLiteral(resourceName: "add_image"){ 
    img = #imageLiteral(resourceName: "add_image") 
}else{ 
    img = self.profileImg.image 
} 

if let imgData = UIImageJPEGRepresentation(img, 0.2){ 
    print(imgData) 
    let imageUid = NSUUID().uuidString 
    print(imageUid) 
    let metaData = StorageMetadata() 
    print(metaData) 
    metaData.contentType = "image/jpeg" 

    DataService.ds.REF_PROFILE_IMAGES.child(imageUid).putData(imgData, metadata: metaData, completion: { (metadata, error) in 
     if error != nil { 
      print ("ADAM: UNABLE TO UPLOAD IMAGE TO FIREBASE STORAGE") 
     }else{ 
      print ("ADAM: SUCCESSFULLY UPLOADED PROFILE IMAGE ") 
      self.downloadURL = metaData.downloadURL()?.absoluteString 


     } 
    }) 
}else{ 
    print("ADAM: SUMTING WONG") 
} 

Auth.auth().createUser(withEmail: emailField.text!, password: passwordField.text!) { (user, error) in 

    if error == nil { 
     print("ADAM: You have successfully signed up") 

     // saving the image to storage and link to database 

     let firstName = self.firstNameField.text 
     let lastName = self.LastNameField.text 
     let userName = self.usernameField.text 
     let profileImageUrl = self.downloadURL 
     print(profileImageUrl) 
     let userData = ["provider" : user!.providerID, "FirstName": firstName, "LastName": lastName, "username": userName, "profileImageURL": profileImageUrl] 

     self.completeSignIn(id: user!.uid, userData: userData as! Dictionary<String, String>) 

프로필 이미지 URL은 반복적으로 nil을 반환하므로 로그인 기능을 실행할 수 없습니다. 디버깅 할 때 Dataservice 메소드가 건너 뛰고 이유를 모르겠다는 것을 알 수 있습니다 :/이미지를 firebase 스토리지에 업로드하려고하지만 실행되고 있지 않습니까?

+1

당신은 전무을보고있다, 당신이 확인할 수 있습니다 https://stackoverflow.com/question/46356012/firebase-one-of-two-observers-not-working/46356267 # 46356267 – 3stud1ant3

+0

@ 3stud1ant3 putData 완료 핸들러에서 사용자를 만들려고했지만 아직 행운이 없습니다. – KONADO

답변

2

저는 이것을 사용하여 사용자를 생성하고 사용자 정보를 Firebase 데이터베이스 및 저장소의 이미지에 저장합니다. 당신은 putData` 폐쇄`안에`createUser` 메소드를 호출 또는 완료 처리기를 사용하거나 필요하므로`putData`는 비동기 호출하기 때문에

func registerUser(withName: String, email: String, password: String, profilePic: UIImage, completion: @escaping (Bool) -> Swift.Void) { 
     Auth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in 
      if error == nil { 
       user?.sendEmailVerification(completion: nil) 
       let storageRef = FIRStorage.storage().reference().child("usersProfilePics").child(user!.uid) 
       let imageData = UIImageJPEGRepresentation(profilePic, 0.1) 
       storageRef.putData(imageData!, metadata: nil, completion: { (metadata, err) in 
        if err == nil { 
         let path = metadata?.downloadURL()?.absoluteString 
         let values = ["name": withName, "email": email, "profilePicLink": path!] 
         FIRDatabase.database().reference().child("users").child((user?.uid)!).child("credentials").updateChildValues(values, withCompletionBlock: { (errr, _) in 
          if errr == nil { 
           let userInfo = ["email" : email, "password" : password] 
           UserDefaults.standard.set(userInfo, forKey: "userInformation") 
           completion(true) 
          } 
         }) 
        } 
       }) 
      } 
      else { 
       completion(false) 
      } 
     }) 
    } 
관련 문제