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

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

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

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

Xcode

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

Swift

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

Q&A

0回答

1152閲覧

swift FireBaseを用いたデータの呼び出し

tsuji71

総合スコア17

Firebase

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

Xcode

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

Swift

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

0グッド

1クリップ

投稿2020/04/07 04:43

前提・実現したいこと

時間割を共有できるアプリを作成しています
初めてログインする際にログイン画面が表示され、FireBaseを用いてユーザーネーム、学部、学年を登録できるようにしました
ここで登録した情報を後から変更するために、設定画面を作成したのですが、その画面にある3つのテキストフィールドに、現在登録してある情報をあらかじめ表示しておきたいです

発生している問題・エラーメッセージ

イメージ説明
上記のログイン画面のテキストフィールドの文字をfirebaseの保存->設定画面のテキストフィールドに表示 とできない

エラーメッセージ

該当のソースコード

swift

1 2// LoginViewController 3 4 5import UIKit 6import Firebase 7import SVProgressHUD 8 9 10class LoginViewController: UIViewController { 11 12 @IBOutlet weak var displayNameTextField: UITextField! 13 @IBOutlet weak var mailAddressTextField: UITextField! 14 @IBOutlet weak var passwardTextField: UITextField! 15 @IBOutlet weak var facultyTextField: UITextField! 16 @IBOutlet weak var gradeTextField: UITextField! 17 18 19 // ログインボタンとの接続 20 @IBAction func hundleLoginButton(_ sender: Any) { 21 if let address = mailAddressTextField.text, let password = passwardTextField.text, let displayname = displayNameTextField.text, let faculty = facultyTextField.text, let grade = gradeTextField.text { 22 23 if address.isEmpty || password.isEmpty || displayname.isEmpty || faculty.isEmpty || grade.isEmpty { 24 SVProgressHUD.showError(withStatus: "必要項目を入力してください") 25 return 26 } 27 28 // HUDで処理中を表示 29 SVProgressHUD.show() 30 31 Auth.auth().signIn(withEmail: address, password: password) { authResult, error in 32 if let error = error { 33 print("DEBUG_PRINT: " + error.localizedDescription) 34 return 35 } 36 print("DEBUG_PRINT: ログインに成功しました。") 37 38 // HUDを消す 39 SVProgressHUD.dismiss() 40 41 // 画面を閉じてタブ画面に戻る 42 self.dismiss(animated: true, completion: nil) 43 } 44 45 } 46 } 47 48 49 // アカウント作成ボタンとの接続 50 @IBAction func hundleAccountCreateButton(_ sender: Any) { 51 52 if let address = mailAddressTextField.text, let password = passwardTextField.text, let displayName = displayNameTextField.text, let faculty = facultyTextField.text, let grade = gradeTextField.text { 53 54// 空欄がある時 55 if address.isEmpty || password.isEmpty || displayName.isEmpty || faculty.isEmpty || grade.isEmpty { 56 print("DEBUG_PRINT: 何かが空文字です") 57 SVProgressHUD.showError(withStatus: "必要項目を入力してください") 58 return 59 } 60 61// HUDで処理中を表示 62 SVProgressHUD.show() 63 64// アドレスとパスワードでユーザー作成 65 Auth.auth().createUser(withEmail: address, password: password) { authResult, error in 66 if let error = error { 67// エラーがあったら原因をプリントする 68 print("DEBUG_PRINT:" + error.localizedDescription) 69 SVProgressHUD.showError(withStatus: "ユーザー作成に失敗しました") 70 return 71 } 72 print("DEBUG_PRINT: ユーザー作成に成功しました") 73 74// プロフィールを保存 75 let userRef = Firestore.firestore().collection(Const.ProfilePath).document() 76 let userDic = [ 77 "name": displayName, 78 "faculty": faculty, 79 "grade": grade 80 ] as [String : Any] 81 userRef.setData(userDic) 82 SVProgressHUD.dismiss() 83 84// 画面を閉じる 85 self.dismiss(animated: true, completion: nil) 86 } 87 } 88 } 89 90 91 92 93 override func viewDidLoad() { 94 super.viewDidLoad() 95 } 96 97 98 99} 100
// SettingViewController import UIKit import Firebase import SVProgressHUD import FirebaseUI class SettingViewController: UIViewController { @IBOutlet weak var displayNameTextField: UITextField! @IBOutlet weak var facultyTextField: UITextField! @IBOutlet weak var gradeTextField: UITextField! // 変更ボタンとの接続 @IBAction func hundleChangeButton(_ sender: Any) { // いずれかの項目が空の時はHUDを出してなにもしない if let displayName = displayNameTextField.text, let faculty = facultyTextField.text, let grade = gradeTextField.text { // 項目が空の時 if displayName.isEmpty || faculty.isEmpty || grade.isEmpty { SVProgressHUD.showError(withStatus: "空の項目があります") return } } } @IBAction func hundleLogoutButton(_ sender: Any) { // ログアウトする try! Auth.auth().signOut() // ログイン画面を表示 let loginViewController = self.storyboard?.instantiateViewController(withIdentifier: "Login") self.present(loginViewController!,animated: true, completion: nil) // ホームボタンを選択した状態にする tabBarController?.selectedIndex = 0 } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } }
// PstData.swift(登録データを格納するクラス) import UIKit import Firebase class PostData: NSObject { var id: String var name: String? var faculty: String? var grade: String? var lessonName: String? var lessonCode: String? init(document: QueryDocumentSnapshot) { self.id = document.documentID let userDic = document.data() self.name = userDic["name"] as? String self.faculty = userDic["faculty"] as? String self.grade = userDic["grade"] as? String self.lessonName = userDic["lessonName"] as? String self.lessonCode = userDic["lessonCode"] as? String } }
// Const.swift(FireBase関連の定数) // // Const.swift // College3 // // Created by Apple on 2020/03/29. // Copyright © 2020 ryotaro.tsuji. All rights reserved. // import Foundation struct Const { static let ImagePath = "images" static let ProfilePath = "profile" static let LessonPath = "lesson" }

試したこと

イメージ説明
FireBaseはこのようになっています

補足情報(FW/ツールのバージョンなど)

xcode11.4を使用

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

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

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

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

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

hoshi-takanori

2020/04/07 05:54

profile の id を auth の uid にして紐付けしましょう。
tsuji71

2020/04/07 06:44

例えば、0c6konDBnLGfDvnzvlSaのような新規のidを生成するのではなく、ユーザー作成時に生成されたuidをそれぞれのprofileのidとするということでしょうか その場合、現在はfirebaseに保存する際に、ランダムなidが生成されていると思うのですが、どう修正すればいいのでしょうか?
hoshi-takanori

2020/04/07 07:05

既存のデータを修正したいということであれば、firebase console でひとつひとつ修正することになるかと。
tsuji71

2020/04/08 01:06

profile の id を auth の uid にして紐付けとはどういうことでしょうか、、 勉強不足ですみません
hoshi-takanori

2020/04/08 20:40

Firebase Auth でログインすると自分の uid が取得できるので、それを id に指定して document を作ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問