🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

447閲覧

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

seiya_0930

総合スコア17

Swift

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

0グッド

0クリップ

投稿2019/10/13 09:52

編集2019/10/13 15:56

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

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

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

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

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

swift

1import UIKit! 2import NCMB 3class signUpViewController: UIViewController,UITextFieldDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 9 userIdTextField.delegate = self 10 emailTextField.delegate = self 11 passwordTextField.delegate = self 12 confirmTextField.delegate = self 13 14 // Do any additional setup after loading the view. 15 } 16 17 18 @IBOutlet weak var userIdTextField:UITextField! 19 @IBOutlet weak var emailTextField:UITextField! 20 @IBOutlet weak var passwordTextField:UITextField! 21 @IBOutlet weak var confirmTextField:UITextField! 22 23 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 24 textField.resignFirstResponder() 25 return true 26 } 27 @IBAction func signUp(){ 28 let user = NCMBUser() 29 user.userName = userIdTextField.text! 30 user.mailAddress = emailTextField.text! 31 if passwordTextField.text == confirmTextField.text { 32 user.password = passwordTextField.text! 33 } else { 34 print("不一致です") 35 } 36 37 user.signUpInBackground { (error) in 38 if error != nil { 39 //エラーがあった場合 40 print("error") 41 } else { 42 //成功 43 let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 44 let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController") 45 UIApplication.shared.keyWindow?.rootViewController = rootViewController 46 } 47 } 48 } 49 50}

swift

1 2import UIKit 3import CoreData 4import NCMB 5@UIApplicationMain 6class AppDelegate: UIResponder, UIApplicationDelegate { 7 8 var window: UIWindow? 9 10 11 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 12 13 NCMB.setApplicationKey("2967bbec9e70b8d691b06dca02f21fe1b1e84f807c245a660e06c85839cfa2ea", clientKey: "1257f541876271709d05b9054223c70f542a17d48ae4d9af78802bf51e2b4b74") 14 15 let ud = UserDefaults.standard 16 let isLogin = ud.bool(forKey: "isLogin") 17 18 if isLogin == true { 19 //ログイン中だったら 20 self.window = UIWindow(frame: UIScreen.main.bounds) 21 let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 22 let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController") 23 self.window?.rootViewController = rootViewController 24 self.window?.backgroundColor = UIColor.white 25 self.window?.makeKeyAndVisible() 26 } else { 27 //ログインしていなっかたら 28 self.window = UIWindow(frame: UIScreen.main.bounds) 29 let storyboard = UIStoryboard(name: "signIn", bundle: Bundle.main) 30 let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationController") 31 self.window?.rootViewController = rootViewController 32 self.window?.backgroundColor = UIColor.white 33 self.window?.makeKeyAndVisible() 34 35 } 36 37 38 return true 39 }

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

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

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

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

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

hameji

2019/10/13 15:43

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

2019/10/13 15: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されてしまう状況です。
guest

回答1

0

ベストアンサー

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

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

Swift

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

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

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

swift

1print(error.code) //

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

投稿2019/10/13 16:01

編集2019/10/13 16:20
hameji

総合スコア1380

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

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

seiya_0930

2019/10/13 16:09

本当にありがとうございます。 無事解決しました。少し張り切り過ぎていたので見落としてしまっていました。 nilについての概念も今一度復習してみます。
seiya_0930

2019/10/13 16:11

大丈夫です、、、!
seiya_0930

2019/10/13 16:18

Optional(Error Domain=com.nifcloud.mbaas Code=400004 "mailAddress is invalid format." UserInfo={NSLocalizedDescription=mailAddress is invalid format.}) と出てきました。mailAddressに問題があるということですか?
hameji

2019/10/13 16:23 編集

はい、mailAddressの形式が間違っているというエラーですね。 入力時に全角になっている?可能性が高いかもしれません。 @がついてないとか、.jpなどの.が抜けているとか、そういうことだと思います。
seiya_0930

2019/10/13 16:27

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

2019/10/13 16:32

紆余曲折の回答に付き合いありがとうございます。 コードは全く間違ってなかったってことですね!!! おめでとうございます。 ちなみに、そういうエラーを公式サンプルコードみたいに どこかに表示してあげる仕様(errorLabel.textなど)にすると ユーザーにとってはわかりやすいいいアプリになりますよ。 (公式ではログインに失敗のみで、メールアドレスの形式が違うとか詳細情報はないけど、、、) error.code をswitchで今回の「400004」とかに分岐して、 UILabelやUITextViewの内容を変えるコード組むといいですよ。
seiya_0930

2019/10/13 17:08

とんでもございません。様々なアドバイスありがとうございました。 確かに、そのようなアラート機能を付けるとユーザーは大変助かりますね。勉強になります。 今回のエラーをバネにそのような実装にも活かしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問