前提・実現したいこと
Firebaseを使って新規登録の機能を作っていたのですが、sinUpButtonを押したところFirebaseにユーザネーム、メールアドレス、パスワードが追加できてるにもかかわらず、画面遷移した瞬間に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Thread 1: "Collection path cannot be empty."
該当のソースコード
Swift
1import UIKit 2import Firebase 3 4 5 6class ViewController: UIViewController,UITextFieldDelegate { 7 8 9 @IBOutlet weak var userTextField: UITextField! 10 11 12 @IBOutlet weak var emailTextField: UITextField! 13 14 15 @IBOutlet weak var passwordTextField: UITextField! 16 17 18 19 20override func viewDidLoad() { 21 super.viewDidLoad() 22 23 userTextField.delegate = self 24 emailTextField.delegate = self 25 passwordTextField.delegate = self 26 27 28 } 29 30 31 @IBAction func LoginPageButton(_ sender: Any) { 32 //ログイン画面に画面遷移する。 33 let LoginController = self.storyboard?.instantiateViewController(withIdentifier: "Login") as! LoginViewController 34 self.navigationController?.pushViewController(LoginController, animated: true) 35 36 37 } 38 39 func sinUp(){ 40 if let name = userTextField.text, 41 42 let mail = emailTextField.text, 43 44 let password = passwordTextField.text{ 45 // FirebaseAuthにemailとpasswordでアカウントを作成する 46 47 Auth.auth().createUser(withEmail: mail, password: password, completion: { (result, error) in 48 49 if let user = result?.user { 50 51 print("user") 52 //FirestoreのUsersコレクションにdocumentID = ログインしたuidでデータを作成する 53 Firestore.firestore().collection("users").document(user.uid).setData(["name": name 54 ],completion: { error in 55 56 if let error = error { 57 58 //Firebaseのデータが作成に失敗したらダイアログを表示する。 59 print("Firestore 新規登録失敗 " + error.localizedDescription) 60 61 let dialog = UIAlertController(title: "新規登録が失敗しました。", message: error.localizedDescription, preferredStyle: .alert) 62 63 dialog.addAction(UIAlertAction(title:"OK",style: .default,handler: nil)) 64 65 self.present(dialog, animated: true, completion: nil) 66 67 }else{ 68 // 新規登録が成功したら成功ダイアログを表示して画面遷移する。 69 print("ユーザー作成完了 name:" + name) 70 71 let dialog = UIAlertController(title: "新規登録成功しました", message: nil, preferredStyle : .alert) 72 self.present(dialog, animated: true, completion: nil) 73 74 let dialogAction = UIAlertAction(title:"OK",style: .default,handler: { 75 action in 76 77 let MedicineViewController = self.storyboard?.instantiateViewController(withIdentifier: "MedicineViewController") as! MedicineViewController 78 self.navigationController?.pushViewController( MedicineViewController, animated: true) 79 80 }) 81 82 dialog.addAction(dialogAction) 83 84 } 85 }) 86 87 }else if let error = error { 88 //FirebaseAuthにemailとpasswordでアカウントの生成が失敗したら 89 print("Firebase Auth 新規登録失敗 " + error.localizedDescription) 90 let dialog = UIAlertController(title: "新規登録失敗", message: error.localizedDescription, preferredStyle: .alert) 91 92 dialog.addAction(UIAlertAction(title:"OK",style: .default,handler: nil)) 93 self.present(dialog, animated: true, completion: nil) 94 95 } 96 }) 97 } 98 } 99 100 101 102 103 104 @IBAction func sinUpButton(_ sender: Any) { 105 sinUp() 106 } 107 108 func textFieldShouldReturn(_ textField:UITextField ) -> Bool{ 109 110 userTextField.resignFirstResponder() 111 emailTextField.resignFirstResponder() 112 passwordTextField.resignFirstResponder() 113 114 return true 115 116 } 117} 118 119 120 121 122
補足情報(FW/ツールのバージョンなど)
Xcode バージョン:10.3
新規登録そのものは成功しているようなので、遷移先の画面 (MedicineViewController) の問題では。