ios - 注册流程到错误的视图控制器并且也不写入firestore
问题描述
所以我的目标是让正确的用户注册并显示正确的 segue 以及将用户信息写入 Firestore。所以我有一个基本的注册功能,当按下注册按钮时会触发它:
@IBAction func schoolSignupPressed(_ sender: UIButton) {
let validationError = validateFields()
let schoolName = schoolNameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let schoolEmail = schoolEmailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let schoolPassword = schoolPasswordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let schoolID = schoolIDTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let schoolDistrict = schoolDistrictTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let dateCreated = Date()
if validationError != nil {
return
}
Auth.auth().createUser(withEmail: schoolEmail, password: schoolPassword) { (result, error) in
guard let signUpError = error?.localizedDescription else { return }
guard error == nil else {
self.showAlert(title: "Error Signing Up", message: "There was an error creating the user. \(signUpError)")
return
}
let db = Firestore.firestore()
guard let result = result else { return }
db.document("school_users/\(result.user.uid)").setData(["school_name":schoolName,
"school_id":schoolID,
"emailAddress": result.user.email ?? schoolEmail,
"remindersPushNotificationsOn": true,
"updatesPushNotificationsOn": true,
"schoolDistrict":schoolDistrict,
"time_created":dateCreated,
"userID": result.user.uid],
merge: true) { (error) in
guard let databaseError = error?.localizedDescription else { return }
guard error == nil else {
self.showAlert(title: "Error Adding User Info", message: "There was an error adding the user info. \(databaseError)")
return
}
}
let changeRequest = result.user.createProfileChangeRequest()
changeRequest.displayName = schoolName
changeRequest.commitChanges { (error) in
guard error == nil else {
return
}
print("School Name Saved!")
}
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
self.performSegue(withIdentifier: Constants.Segues.fromSchoolSignUpToSchoolDashboard, sender: self)
}
}
}
这是“学校”用户的注册功能,但“学生”用户本质上是相同的,只是不同的字段,当然还有不同的 segue 目的地。现在可能就像一天前或两天前,我正在测试这个功能,它工作得很好,用户成功注册,用户信息被写入 firestore,显示正确的视图控制器,唯一的区别是我有一些DispatchGroup
函数中的块,因为当我在 TestFlight 中运行该方法时,会有几个错误会导致应用程序崩溃。
所以我想既然模拟器中的一切都运行良好,我将构建存档,将其上传到 TestFlight 并等待它被批准。它昨晚获得批准,今天早上我最终在手机上对其进行了测试以再次查看它,现在当我尝试以学校用户或学生用户身份注册时,它每次都转到错误的视图控制器并且没有信息被写入firestore,用户只是保存在Firebase Auth中,这不是我在我的应用程序中期望的结果。
我检查了 segue 标识符,检查了连接选项卡,即使 24 小时前它运行良好,我仍然检查了所有内容。我正在尽我最大的努力真正欣赏 Apple 为开发人员所做的事情,但我真的开始对 TestFlight 产生仇恨,我在模拟器中所做和运行的一切都在 Xcode 上运行得非常好,只要我在 TestFlight 中运行它,一切只是走出窗外。我讨厌这些类型的错误,因为您真的不知道问题出在哪里,仅仅是因为您在以前的所有其他情况下都使用了完全相同的方法,如果不是非常相似的话。
登录过程适用于学生和学校用户,我将展示一个学校用户登录方法的示例:
@IBAction func loginPressed(_ sender: UIButton) {
let validationError = validateFields()
let email = schoolEmailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let password = schoolPasswordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
if validationError != nil {
return
} else {
Auth.auth().signIn(withEmail: email, password: password) { (result, error) in
guard let signInError = error?.localizedDescription else { return }
let group = DispatchGroup()
group.enter()
guard error == nil else {
self.showAlert(title: "Error Signing In", message: "There was an issue trying to sign the user in. \(signInError)")
return
}
group.leave()
group.notify(queue: .main) {
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
self.performSegue(withIdentifier: Constants.Segues.fromSchoolLoginToSchoolEvents, sender: self)
}
}
}
}
}
对于学生用户来说几乎相同。如果有人能在第一个代码片段中指出这个错误的可能问题,那就太棒了。提前致谢。
解决方案
尽管它很有帮助,但删除error.localizedDescription
线路使一切恢复正常。
推荐阅读
- python - 当 python 脚本安装为带有 NSSM 的 Windows 服务时,是否可以打印文件?
- sap - SAP HANA 中的 CREATE TABLE 和 CREATE COLUMN TABLE 有什么区别
- swift - 在 Scene Delegate 中实现 Firebase Auth 侦听器后应用程序崩溃
- django - 进行ajax post调用时Django rest框架csrf豁免
- sql - T-SQL:行到列
- pytorch - 在 gRPC 中将 Pytorch 的张量作为消息发送
- html - 换行时,Bootstrap 4 Float-Right 不起作用
- zsh - ZLE 中似乎缺少 _expand_alias 小部件
- java - Spring Boot 应用程序无法在 Kubernetes 集群上运行
- javascript - Node.js 流管道