#質問したいこと
現在firebaseを使ったアプリを作成しています。前回の質問の時にもあった相手側が設定したパスワードと自分が入力したパスワードが一致した場合にログインできるようにするというところで前回とは違う
Cast from 'DocumentReference' to unrelated type 'String' always fails
というエラーが出てきました。画面遷移をする時にも落ちてしまうのでおそらくここが問題なのではないのかと思います。
#コード
swift5
1import UIKit 2import Firebase 3import FirebaseAuth 4 5class AccountViewController: UIViewController, UITextFieldDelegate { 6 var acount: FirebaseApp! 7 8 var database: Firestore! 9 10 var saveData: UserDefaults = UserDefaults.standard 11 12 13 @IBAction private func didTapSignUpButton() { 14 let email = emailTextField.text ?? "" 15 let password = passwordTextField.text ?? "" 16 let name = nameTextField.text ?? "" 17 let groupname = groupnameTextField.text ?? "" 18 19 20 let dataname: String = database.collection("group").document("groupname") as! String 21 let datapassword: String = database.collection("group").document("groupname") as! String 22 if dataname == groupnameTextField.text && datapassword == passwordTextField.text{ 23 Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in 24 guard let self = self else { return } 25 if let user = result?.user { 26 let req = user.createProfileChangeRequest() 27 req.displayName = name 28 req.commitChanges() { [weak self] error in 29 guard let self = self else { return } 30 if error == nil { 31 user.sendEmailVerification() { [weak self] error in 32 guard let self = self else { return } 33 if error == nil { 34 // 仮登録完了画面へ遷移する処理 35 // サインアップ完了のフラグを保持する 36 UserDefaults.standard.set(true, forKey: "appSignUpStatusKey") 37 UserDefaults.standard.synchronize() 38 } 39 self.showErrorIfNeeded(error) 40 } 41 } 42 self.showErrorIfNeeded(error) 43 } 44 } 45 self.showErrorIfNeeded(error) 46 } 47 // サインアップ完了のフラグを保持する 48 UserDefaults.standard.set(true, forKey: "appSignUpStatusKey") 49 // ユーザー名を保存する 50 UserDefaults.standard.set(name, forKey: "userNameKey") 51 UserDefaults.standard.synchronize() 52 53 } 54 } 55 56 57 private func showErrorIfNeeded(_ errorOrNil: Error?) { 58 // エラーがなければ何もしません 59 guard let error = errorOrNil else { return } 60 let message = "エラーが起きました" // ここは後述しますが、とりあえず固定文字列 61 let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) 62 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 63 present(alert, animated: true, completion: nil) 64 } 65 66} 67
swift5
1//エラーが出ている箇所 2let dataname: String = database.collection("group").document("groupname") as! String 3 let datapassword: String = database.collection("group").document("groupname") as! String 4 if dataname == groupnameTextField.text && datapassword == passwordTextField.text{ 5// 6// 7// 8}
#エラー
Cast from 'DocumentReference' to unrelated type 'String' always fails
追記
まだfirebaseを使い始めたばかりなので、丁寧に教えてくださると嬉しいです。
database.collection("group").document("groupname") は String ではなく
DocumentReferenceが返ってくるので、それを String で強制キャストしようとしてエラーになっているんだと思います。
もしFirestoreの"group"コレクション内のドキュメントを取得したい場合は
getDocumentsメソッドを使うと取得できると思います。
Firestoreにどんなデータがあって、何が取り出したいのかを追記していただければより詳しく回答できると思います????♂️
firebaseには相手側で設定したパスワードとグループ名が入っています。それら2つのデータを取り出したいです。
なるほど。
ドキュメントの名前は"groupname"で固定でしょうか?
あと、パスワードとグループ名が入っているフィールドの名前を教えていただけませんか?
ドキュメントの名前はグループ名の方がgroupnameで、パスワードの方がgrouppasswordです。(わかりにくくてすみません????♂️)
パスワードが入っているフィールド名はgrouppasswordで
グループ名が入っているフィールド名はgroupnameです。
回答1件
あなたの回答
tips
プレビュー