我正在跟踪有关Udemy的有关Swift的教程,即使我的代码与老师的代码完全相同,我的应用也会崩溃。
它使用Firebase创建用户并登录。
我的问题是,当我尝试创建新用户时,它因以下错误而崩溃:
"*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]"
研究完我的代码后,看来问题出在registerUser函数上:
static func registerUser(withCredentials credentials: AuthCredentials, completion: @escaping((Error?) -> Void)) {
Service.uploadImage(image: credentials.profileImage) { imageUrl in
Auth.auth().createUser(withEmail: credentials.email, password: credentials.password) { (result, error) in
if let error = error {
print("DEBUG: Error signing user up, \(error.localizedDescription)")
return
}
guard let uid = result?.user.uid else { return }
let data = ["email": credentials.email,
"name": credentials.name,
"imageUrl": imageUrl,
"uid": uid,
"age": 18] as [String : Any]
Firestore.firestore().collection("users").document(uid).setData(data, completion: completion)
}
}
}
在这里称为
@objc func handleRegisterUser() {
guard let email = emailTextField.text else { return }
guard let name = nameTextField.text else { return }
guard let password = passwordTextField.text else { return }
guard let profileImage = self.profileImage else { return }
let credentials = AuthCredentials(email: email, password: password, name: name, profileImage: profileImage)
**AuthService.registerUser(withCredentials: credentials) { error in
if let error = error {
print("DEBUG: Error signing user up, \(error.localizedDescription)")
return
}**
self.dismiss(animated: true, completion: nil)
}
}
有人可以通过指导我正确看待我的方向来帮助我吗? 我尝试搜索StackOverFlow,但我能找到的最接近的线程是6年前的,而我在那里没有找到任何答案。
非常感谢您的帮助,
吉耶瑟斯
答案 0 :(得分:0)
我认为imageUrl在您的情况下为零。像这样更改此功能,看看有什么问题
static func registerUser(withCredentials credentials: AuthCredentials, completion: @escaping((Error?) -> Void)) {
Service.uploadImage(image: credentials.profileImage) { imageUrl in
let urlString: String? = imageUrl
Auth.auth().createUser(withEmail: credentials.email, password: credentials.password) { (result, error) in
if let error = error {
print("DEBUG: Error signing user up, \(error.localizedDescription)")
return
}
guard let uid = result?.user.uid else { return }
guard let geturl = urlString else { print("url is nil"); return}
guard let getName = credentials.name else { print("name is nil"); return}
let data = ["email": credentials.email,
"name": credentials.name,
"imageUrl": imageUrl,
"uid": uid,
"age": 18] as [String : Any]
Firestore.firestore().collection("users").document(uid).setData(data, completion: completion)
}
}
}