質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1535閲覧

Swift エラー Thread 1: "Collection path cannot be empty."の解決方法を教えてください。

gaa

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/08/21 15:50

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/08/21 22:58

新規登録そのものは成功しているようなので、遷移先の画面 (MedicineViewController) の問題では。
guest

回答1

0

画面遷移した瞬間に以下のエラーメッセージが発生しました。

なら、画面遷移した瞬間のそいつの値を調べてみればどうでしょうか

投稿2021/08/21 22:43

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問