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

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

ただいまの
回答率

90.51%

  • Swift

    7224questions

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

  • Xcode

    4087questions

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

  • Firebase

    601questions

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

  • Google

    596questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

  • Facebook

    402questions

    Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

メールアドレスベースでログインを実現したいです。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 311
退会済みユーザー

退会済みユーザー

swift4
xcode9.2

FirebaseAuthで、メールアドレスベースでログイン認証を実装したいです。

サインアップには成功しました。
(画像の"会員登録"ビューで登録buttonをタップし、"ログインしたよ"まで遷移できています。)

ですが、"ログイン"ビューのログインbuttonをタップすると、
エラーでクラッシュします。

イメージ説明

この場合の、
ログインするのに相応しいMailLogInViewControllerrのコードを教えて頂きたいです。

よろしくお願いします。

参考サイト(動画)

MailSignUpViewControllerサインアップです)

import UIKit
import Firebase
import FirebaseAuth


class MailSignUpViewController: UIViewController {

    @IBOutlet weak var emailTF: UITextField!
    @IBOutlet weak var passwordTF: UITextField!
    @IBOutlet weak var usernameTF: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //サインアップボタン!
    @IBAction func mailSignUpButton(_ sender: Any) {

      guard let email = emailTF.text else { return }
      guard let pass = passwordTF.text else { return }
      guard let username = usernameTF.text else { return }


        Auth.auth().createUser(withEmail: email, password: pass) { user, error in
            if error == nil && user != nil {
                print("ユーザー登録したよ")


        let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
        changeRequest?.displayName = username
        changeRequest?.commitChanges { error in
            if error == nil {
                print("User display name changed!")
                self.dismiss(animated:  false, completion:  nil)
            }
        }

           } else {
                print("ユーザー登録失敗!: \(error!.localizedDescription)")
}
}
}


}
MailLogInViewControllerrログインです)

import UIKit
import Firebase
import FirebaseAuth

class MailLogInViewController: UIViewController {

    @IBOutlet weak var emailTF: UITextField!
    @IBOutlet weak var passwordTF: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func mailLogInButton(_ sender: Any) {

        func login() {


     Auth.auth().signIn(withEmail: emailTF.text!, password: passwordTF.text!, completion: {
          user,error in
        if error != nil {

           print("ユーザーログイン失敗!: \(error!.localizedDescription)")

            }
        else {
            print("ログイン!")
        }
    }


)}
}
}
(エラーコンソールです)
2017-12-31 14:37:33.475932+0900 make01[5540:498135] [Firebase/Analytics][I-ACS023007] Firebase Analytics v.40005000 started
2017-12-31 14:37:33.476093+0900 make01[5540:498135] [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://goo.gl/RfcP7r)
アプリを開いたよ
2017-12-31 14:37:33.898667+0900 make01[5540:498022] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/tanakaatsushi/Library/Developer/CoreSimulator/Devices//data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-12-31 14:37:33.901754+0900 make01[5540:498022] [MC] Reading from private effective user settings.
2017-12-31 14:37:33.913445+0900 make01[5540:498022] Could not successfully update network info during initialization.
2017-12-31 14:37:34.032210+0900 make01[5540:498145] TIC Read Status [1:0x0]: 1:57
2017-12-31 14:37:34.032329+0900 make01[5540:498145] TIC Read Status [1:0x0]: 1:57
2017-12-31 14:37:34.230953+0900 make01[5540:498143] TIC Read Status [2:0x0]: 1:57
2017-12-31 14:37:34.231077+0900 make01[5540:498143] TIC Read Status [2:0x0]: 1:57
2017-12-31 14:37:35.029164+0900 make01[5540:498022] Unknown class MailLogInViewController in Interface Builder file.
2017-12-31 14:37:35.060771+0900 make01[5540:498022] [MC] Lazy loading NSBundle MobileCoreServices.framework
2017-12-31 14:37:35.062220+0900 make01[5540:498022] [MC] Loaded MobileCoreServices.framework
2017-12-31 14:37:37.085986+0900 make01[5540:498022] -[UIViewController mailLogInButton:]: unrecognized selector sent to instance 0x7fa07680fc10
2017-12-31 14:37:37.090251+0900 make01[5540:498022] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController mailLogInButton:]: unrecognized selector sent to instance 0x7fa07680fc10'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010e53d12b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010dbd1f41 objc_exception_throw + 48
    2   CoreFoundation                      0x000000010e5be024 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   UIKit                               0x000000010f301f51 -[UIResponder doesNotRecognizeSelector:] + 295
    4   CoreFoundation                      0x000000010e4bff78 ___forwarding___ + 1432
    5   CoreFoundation                      0x000000010e4bf958 _CF_forwarding_prep_0 + 120
    6   UIKit                               0x000000010f0cf972 -[UIApplication sendAction:to:from:forEvent:] + 83
    7   UIKit                               0x000000010f24ec3c -[UIControl sendAction:to:forEvent:] + 67
    8   UIKit                               0x000000010f24ef59 -[UIControl _sendActionsForEvents:withEvent:] + 450
    9   UIKit                               0x000000010f24de86 -[UIControl touchesEnded:withEvent:] + 618
    10  UIKit                               0x000000010f145807 -[UIWindow _sendTouchesForEvent:] + 2807
    11  UIKit                               0x000000010f146f2a -[UIWindow sendEvent:] + 4124
    12  UIKit                               0x000000010f0ea365 -[UIApplication sendEvent:] + 352
    13  UIKit                               0x000000010fa36a1d __dispatchPreprocessedEventFromEventQueue + 2809
    14  UIKit                               0x000000010fa39672 __handleEventQueueInternal + 5957
    15  CoreFoundation                      0x000000010e4e0101 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    16  CoreFoundation                      0x000000010e57ff71 __CFRunLoopDoSource0 + 81
    17  CoreFoundation                      0x000000010e4c4a19 __CFRunLoopDoSources0 + 185
    18  CoreFoundation                      0x000000010e4c3fff __CFRunLoopRun + 1279
    19  CoreFoundation                      0x000000010e4c3889 CFRunLoopRunSpecific + 409
    20  GraphicsServices                    0x000000011497d9c6 GSEventRunModal + 62
    21  UIKit                               0x000000010f0ce5d6 UIApplicationMain + 159
    22  make01                              0x000000010b727f97 main + 55
    23  libdyld.dylib                       0x0000000111f09d81 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

   //エラーを追記しました

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • komo_ta

    2017/12/31 19:33

    りょうかいです!

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/12/31 19:45 編集

    komo_ta様 すみません何度も 感謝します。githubのレポジトリを作成できたと思います。見ていただけますか?

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/12/31 19:57 編集

    レポジトリのストーリーボードには、本文の画像には写ってないビューがあったりして分かりづらいですが今回の質問には関係ありません。よろしくお願いします。

    キャンセル

回答 1

checkベストアンサー

+1

①Main.storyboardを開いてください。
②MailLogInViewControllerをクリックして、画像のように右のサイドバーの3タブ目を開いてください。
③CustomClassの inherit Module From Targetのチェックボックスをつけてください。
画像も載せておくので確認してください。ModuleがNoneからmake01に変わったらOKです
イメージ説明

これでビルドすると大丈夫かと思います。正しくMailLogInViewControllerとして紐付けがうまくいってなかったようです。いちお確認として、mailLogInButtonにブレイクポイントを置いて確認してください

もう一つ気になった点で
小規模のアプリですと、main.storyboardにViewControllerを全て配置しても大丈夫だとは思いますが、
基本的には一つのViewControllerに対して、一つのstoryboardの設計がいいかと思います。
理由としては、共同で作業を行う場合、main.storyboardにViewControllerを置いておくと、
それが原因でコンフリクトする危険が高いのと、
main.storyboardにViewControllerを入れすぎると、読み込むのに時間がかかります(Xcodeでという意味)

なのでコードによってViewControllerのインスタンスを作成して、画面遷移させる方法も覚えておいて損はないかと思います。以下にFirstViewControllerから、 SecondViewControllerに遷移する方法をコードで書いたので参考にしてみてください。(あくまで一例です)


FirstViewControllerに対応するstoryboardをFirstViewController.storyboard,
SecondViewControllerに対応するstoryboardをSecondViewController.storyboard,
とします

class FirstViewController: UIViewController {

  static func createInstance() -> FirstViewController {
    let storyboard = UIStoryboard(name: "FirstViewController", bundle: nil)
    let instance = storyboard.instantiateViewController(withIdentifier:"FirstViewController") as! FirstViewController
    return instance
  }

  override func viewDidLoad() {
   super.viewDidLoad()
  }

  //あるボタンがあったとしてbuttonタップしたときにSecondViewContollerへmodal遷移する
  func btnTapped() {
   let secondVC = SecondViewController.createInstance()
    present(secondVC, animated: true, completion: nil)
  }

}
class SecondViewController: UIViewController {

  static func createInstance() -> SecondViewController {
    let storyboard = UIStoryboard(name: "SecondViewController", bundle: nil)
    let instance = storyboard.instantiateViewController(withIdentifier:"SecondViewController") as! SecondViewController
    return instance
  }

  override func viewDidLoad() {
   super.viewDidLoad()
  }
}

よろしくお願いします

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/31 21:39 編集

    komo_ta様
    回答や、メインストーリーボードの使い方など大変ご丁寧に教えて頂きありがとうございます。
    恐れ入りますが、ただいま③を設定しビルドし、メールアドレスとパスを入力してログインボタンをタップしましたが、そこから遷移されず何も動作しません。(エラーはありません。)コンソールにも何も現れません。

    キャンセル

  • 2017/12/31 21:45

    そのあとは考えてみてください。答えを教えることもできますが、考えることも必要かと思うので。こちらの質問に対する回答にはなっています。今現れないといっているのはこの質問を解決した後に起こった問題なので、もう少し考えてみてください。それで無理だったら質問を立てるようにお願いします〜

    キャンセル

  • 2017/12/31 21:48

    分かりました!長い間お付き合い頂いてとても助かりました。
    トライして見ます ありがとうございました。良いお年を!

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7224questions

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

  • Xcode

    4087questions

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

  • Firebase

    601questions

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

  • Google

    596questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

  • Facebook

    402questions

    Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。