Недействительный вызов setPhotoURL: после commitChangesWithCallback

Я пытаюсь реализовать представление профиля пользователя, в котором пользователь выбирает изображение профиля из ролика камеры и имя пользователя. Когда все будет выбрано, пользователь нажимает на createProfileButton, который вызывает следующую функцию:

@objc func createProfileButtonPressed() {
    let user = Auth.auth().currentUser
    let uid = Auth.auth().currentUser?.uid
    let firebaseStorageRef = Storage.storage().reference().child("profile_picture").child(uid!)
    let database = Firestore.firestore()

    // settings for disabling warning concerning firestore
    let settings = database.settings
    settings.areTimestampsInSnapshotsEnabled = true
    database.settings = settings

    let profileChangeRequest = user?.createProfileChangeRequest()
    profileChangeRequest?.displayName = self.usernameTextfield.text

    if let profileImage = profilePicture, let imageData = UIImageJPEGRepresentation(profileImage, 0.1) {
        firebaseStorageRef.putData(imageData, metadata: nil) { (metadata, error) in
            if error != nil {
                print("Error:", error!)
                return
            }
            firebaseStorageRef.downloadURL(completion: { (url, error) in
                if error != nil {
                    print("Error:", error!)
                    return
                }
                print("Picture URL:", url!)
                profileChangeRequest?.photoURL = url
            })
        }
    }

    profileChangeRequest?.commitChanges(completion: { (error) in
        if error != nil {
            print("Error:", error!)
            return
        }
        print("Profile created")
        var databaseRef = database.collection("users").addDocument(data: ["uid": uid!, "email": user?.email!, "username": user?.displayName, "profileImageURL": user?.photoURL?.absoluteString], completion: { (error) in
            if error != nil {
                print("Error storing user", error!)
                return
            }
            print("user successfully stored!")
        })
        self.navigationController?.popToRootViewController(animated: true)
    })
}

Я хочу, чтобы пользователи писали, имя пользователя, uid и photoURL, хранящиеся в документе firestore. Однако, я получаю эту ошибку:

Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Недействительный вызов setPhotoURL: после commitChangesWithCallback :.»

Это происходит после вызова функции popToRootViewController. Почему это сообщение об ошибке появляется, хотя я хочу установить photoURL, прежде чем совершать изменения?

0
задан simson 13 August 2018 в 14:41
поделиться