2016-09-25 7 views
0

Firebaseバックエンドからユーザーにエラーアラートを表示しようとしています。モデルからの警告を表示

私はサインアップ機能をMVCに従って分類してモデルに入れましたが、print(error!.localizedDescription)はモデルのif statementにネストされています。 alertControllerは、main.storyboardのビューに属していないため、単純に作成することはできません。

どのように私のモデルからそのエラーをプルし、VCを介してビューに戻すことができますか?

MODEL

func signUp(email: String, username: String, password: String, data: NSData!) 
{ 

    FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in 
     if error == nil 
     { 

     self.setUserInfo(user: user, username: username, password: password, data: data) 

     } 
     else 
     { 
     print(error!.localizedDescription) 
     } 
    }) 
} 

ビューコントローラ

@IBAction func signupButton(_ sender: AnyObject) 
    { 
    if self.emailTextField.text == "" || self.usernameTextField.text == "" || self.passwordTextField.text == "" 

    { 
     let alertController = UIAlertController(title: "Oops!", message: "Please enter a valid username, email & password", preferredStyle: .alert) 
     let defaultAction = UIAlertAction(title: "Ok", style: .cancel, handler: nil) 
     alertController.addAction(defaultAction) 

     self.present(alertController, animated: true, completion: nil) 
    } 
    else 
    { 
    let data = UIImageJPEGRepresentation(self.userProfilePicture.image!, 0.8) 

    networkingService.signUp(email: emailTextField.text!, username: usernameTextField.text!, password: passwordTextField.text!, data: data as NSData!) 
    } 
} 

NetworkingService私が呼ぶ構造体です。

ありがとう、私はまだMVCの周りに私の頭をラップしようとしています。

答えて

2

モデルのsignUpメソッドに補完ブロックを追加します。

func signUp(email: String, username: String, password: String, data: NSData, completion: Error? ->()) 
{ 
    FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in 
     if error == nil { 
      self.setUserInfo(user: user, username: username, password: password, data: data) 
     } 
     completion(error) 
    }) 
} 

次に、ユーザーが作成されている/作成されていないときに呼び出されるクロージャーを指定します。

@IBAction func signupButton(_ sender: AnyObject) { 

    guard 
     let email = emailTextField.text, 
     let username = usernameTextField.text, 
     let password = passwordTextField.text, 
     let image = userProfilePicture.image, 
     let data = UIImageJPEGRepresentation(image, 0.8) 
    where 
     email != "" && 
     username != "" && 
     password != "" 
    else { 
     let alertController = UIAlertController(title: "Oops!", message: "Please enter a valid username, email & password", preferredStyle: .alert) 
     alertController.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil)) 
     present(alertController, animated: true, completion: nil) 
    } 

    networkingService.signUp(email: email, username: username, password: password, data: data) { error in 
     if let error = error { 
      print(error.localizedDescription) 
     } 
    } 
} 
+0

これは完璧に機能しました。ありがとうございました! – ishkur88

関連する問題