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

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

ただいまの
回答率

87.34%

新規会員登録ボタンの実装をするとエラーがプリントされる

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 758

score 9

あるアプリを作成する際に、新規登録、ログイン画面の作成に取り掛かっています。

前提として、ログイン時のviewと、した後のメインのviewの2つがあります。
ログインしたらメインのviewに切り替わる形です。

メインのviewのID名がRootTabBarController
新規登録viewのクラス名がsignUpViewControllerです。

今発生している問題が、ログイン時のviewで新規会員登録ボタンを押し、新規登録のviewで"ユーザー名"、"メールアドレス"、"パスワード"、"パスワード(確認)"をそれぞれ入力した後に新規登録ボタンを押すと、メインのviewに切り替えたいのですが、errorがprintされてしまいます。

何度もコードを見直したのですが、解決策が見当たらない状態です。
何か方法があれば教えていただきたいです。
イメージ説明
イメージ説明

import UIKit!
import NCMB
class signUpViewController: UIViewController,UITextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()


        userIdTextField.delegate = self
        emailTextField.delegate = self
        passwordTextField.delegate = self
        confirmTextField.delegate = self

        // Do any additional setup after loading the view.
    }


      @IBOutlet weak var userIdTextField:UITextField!
      @IBOutlet weak var emailTextField:UITextField!
      @IBOutlet weak var passwordTextField:UITextField!
      @IBOutlet weak var confirmTextField:UITextField!

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
         return true
    }
    @IBAction func signUp(){
        let user = NCMBUser()
        user.userName = userIdTextField.text!
        user.mailAddress = emailTextField.text!
        if passwordTextField.text == confirmTextField.text {
            user.password = passwordTextField.text!
        } else {
            print("不一致です")
        }

        user.signUpInBackground { (error) in
            if error != nil {
                //エラーがあった場合
                print("error")
            } else {
                //成功
                let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
                let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController")
                UIApplication.shared.keyWindow?.rootViewController = rootViewController
            }
        }
    }

}
import UIKit
import CoreData
import NCMB
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        NCMB.setApplicationKey("2967bbec9e70b8d691b06dca02f21fe1b1e84f807c245a660e06c85839cfa2ea", clientKey: "1257f541876271709d05b9054223c70f542a17d48ae4d9af78802bf51e2b4b74")

        let ud = UserDefaults.standard
        let isLogin = ud.bool(forKey: "isLogin")

        if isLogin == true {
            //ログイン中だったら
            self.window = UIWindow(frame: UIScreen.main.bounds)
            let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
            let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController")
            self.window?.rootViewController = rootViewController
            self.window?.backgroundColor = UIColor.white
            self.window?.makeKeyAndVisible()
        } else {
            //ログインしていなっかたら
            self.window = UIWindow(frame: UIScreen.main.bounds)
            let storyboard = UIStoryboard(name: "signIn", bundle: Bundle.main)
            let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationController")
            self.window?.rootViewController = rootViewController
            self.window?.backgroundColor = UIColor.white
            self.window?.makeKeyAndVisible()

        }


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • hameji

    2019/10/14 00:43

    どんなエラー文が出ているのか追記をお願いします。
    その際、省略せずに、全部載せていただけるとアドバイスできるかもしれません。

    キャンセル

  • seiya_0930

    2019/10/14 00:58

    拙い説明ですみません。 user.signUpInBackground { (error) in
    if error != nil {
    //エラーがあった場合
    print("error")
    } else {
    //成功
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController")
    UIApplication.shared.keyWindow?.rootViewController = rootViewController
    の箇所のところで、errorがprintされてしまう状況です。

    キャンセル

回答 1

checkベストアンサー

+1

見当違いの答えを書いてました。
逆にしたら、エラーの時も画面遷移するになってしまっています。
ミスリードしてしまい申し訳ありません。

すいません、自分が疲れていた?のかもしれません。
原因はニフクラのサーバーからのerrorをプリントしてみるとわかるかもしれません。

print("error:", error.description) // もしくはerrorのみ


としてみると、コンソソールに英語で理由が表示されると思います。
見てみてください。

ちなみに公式サンプルもみて見ると、
https://github.com/NIFCloud-mbaas/SwiftLoginApp/blob/master/SwiftLoginApp/LoginViewController.swift

print(error.code) // 

エラーコードを出力するようになっています。
そのコードが何をさすかをまた調べないといけないかもしれませんが、、、

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/10/14 01:27

    ありがとうございます!!!

    無事画面遷移がうまくいきました!!!
    .jpのところが, jpになっていました。

    キャンセル

  • 2019/10/14 01:32

    紆余曲折の回答に付き合いありがとうございます。
    コードは全く間違ってなかったってことですね!!!
    おめでとうございます。

    ちなみに、そういうエラーを公式サンプルコードみたいに
    どこかに表示してあげる仕様(errorLabel.textなど)にすると
    ユーザーにとってはわかりやすいいいアプリになりますよ。

    (公式ではログインに失敗のみで、メールアドレスの形式が違うとか詳細情報はないけど、、、)
    error.code をswitchで今回の「400004」とかに分岐して、
    UILabelやUITextViewの内容を変えるコード組むといいですよ。

    キャンセル

  • 2019/10/14 02:08

    とんでもございません。様々なアドバイスありがとうございました。

    確かに、そのようなアラート機能を付けるとユーザーは大変助かりますね。勉強になります。
    今回のエラーをバネにそのような実装にも活かしてみます。

    キャンセル

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

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

関連した質問

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