Я пытаюсь реализовать представление профиля пользователя, в котором пользователь выбирает изображение профиля из ролика камеры и имя пользователя. Когда все будет выбрано, пользователь нажимает на 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, прежде чем совершать изменения?