2016-04-15 2 views
0

Я пытаюсь изменить (изменить) электронную почту пользователя в приложении iOS с помощью быстрой и огневой базы. При изменении функции электронной почты я добавил некоторые ошибки и предупреждения для каждой ошибки.Предупреждающий контроллер не обнаруживает ошибку! Swift-Project

Когда я смоделировал и протестировал ошибки, например, я попытался ввести неверный адрес электронной почты, ошибка работает правильно! Но предупреждение не появляется, и оно дает мне эту ошибку, как на рисунке ниже. enter image description here

Вот код:

if EmailAddressTF.text=="" || PasswordTF.text=="" || BusinessNameTF.text=="" 
    { 
     let alert = UIAlertController(title: "Oops!", message:"Make sure to fill in all required textfields", preferredStyle: .Alert) 
     alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
     self.presentViewController(alert, animated: true){} 
    } 

    else { 

     if RepasswordTF.text != PasswordTF.text 
     { 
      let alert = UIAlertController(title: "Oops!", message:"You Entered Different Passwords", preferredStyle: .Alert) 
      alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
      self.presentViewController(alert, animated: true){} 
     } 

     else { 

      let ref = Firebase(url: "https://businesswallet.firebaseio.com/") 

      let mainpass = NSUserDefaults.standardUserDefaults().objectForKey("password") as? String 
      let mainEmail = NSUserDefaults.standardUserDefaults().objectForKey("Email") as? String 


      let isEqu = (mainEmail == self.EmailAddressTF.text) 
      if(isEqu == true) 
      { } 
      else 
      { 
       ref.changeEmailForUser(mainEmail, password: mainpass, toNewEmail: self.EmailAddressTF.text, withCompletionBlock: { error in 

        if error != nil { 

         if let errorCode = FAuthenticationError(rawValue: error.code) { 

          switch (errorCode) { 
          case .EmailTaken: 
           print("Email taken") 
           let alert = UIAlertController(title: "Oops!", message:"Sorry,Email taken", preferredStyle: .Alert) 
           alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
           self.presentViewController(alert, animated:true){} 

          case .InvalidEmail: 
           print("invalid email") 
           let alert = UIAlertController(title: "Oops!", message:"invalid email", preferredStyle: .Alert) 
           alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
           self.presentViewController(alert, animated:true){} 


          case .NetworkError: 
           print("Network Error") 
           let alert = UIAlertController(title: "Oops!", message:"Network error, check your connection", preferredStyle: .Alert) 
           alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
           self.presentViewController(alert, animated: true){} 

          default: 
           print("Unknown Error") 
           let alert = UIAlertController(title: "Oops!", message:"Unknown Error", preferredStyle: .Alert) 
           alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
           self.presentViewController(alert, animated: true){} 
          } 
         } 





        } else { 

         NSUserDefaults.standardUserDefaults().setValue(self.EmailAddressTF.text, forKey: "Email") 
         print("Email changed successfully") 

        } 

       }) 

      } //Big Else 

И как я могу это исправить?

+0

это означает, что вы представить, что предупреждение о неправильном ViewController или представлении. –

+0

Похоже, вы пытаетесь представить контроллер предупреждения с контроллера вида, который в настоящее время не представлен. – Slayter

+0

Но контроллер в настоящее время представлен! Я не понял!! Что это значит? – Mariah

ответ

0

Это код obj-c, но вы можете легко преобразовать его в быстрый.

- (void)throwAlert 
{ 
    UIWindow* window = [[UIApplication sharedApplication] keyWindow]; 
     UIAlertController *alert = [UIAlertController 
            alertControllerWithTitle:@"myTitle" 
            message:@"myMessage" 
            preferredStyle:UIAlertControllerStyleAlert]; 

    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {}]; 

    [alert addAction:defaultAction]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     if (window.rootViewController.presentedViewController != nil) 
     { 
      [window.rootViewController.presentedViewController presentViewController:alert animated:YES completion:nil]; 
     } 
     else 
     { 
      [window.rootViewController presentViewController:alert animated:YES completion:nil]; 
     } 
    }); 

}

скоро:

func throwAlert() 
    { 
     let window = UIApplication.sharedApplication().keyWindow 

     let alert = UIAlertController(title: "Oops!", message:"You Entered Different Passwords", preferredStyle: .Alert) 
     alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 

     dispatch_async(dispatch_get_main_queue()) { 

      if window.rootViewController?.presentedViewController != nil 
      { 
       window.rootViewController?.presentedViewController!.presentViewController(alert, animated: true){} 
      } 
      else 
      { 
       window.rootViewController!.presentViewController(alert, animated: true){} 
      } 
     } 

    } 
+0

Компилятор заставил меня добавить восклицательный знак перед второй точкой! Когда он был протестирован в симуляторе, он дал мне эту ошибку: фатальная ошибка: неожиданно найдена нуль при разворачивании необязательного значения – Mariah

+0

да ... вам нужен восклицательный знак там ... это правильно. Но ваш представленный контроллер в нуле, вот почему произошел сбой. Можете ли вы опубликовать код для своего класса, где вы пытаетесь вызвать это предупреждение? –

+0

Я отредактировал вопрос и добавил код. – Mariah

0

Попробуйте представить уведомление в главном потоке

dispatch_async(dispatch_get_main_queue()) { 
let alertController = UIAlertController(title: head, message: message, preferredStyle: .Alert) 
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in 
print("you have pressed OK button"); 
} 
alertController.addAction(OKAction) 

self.presentViewController(alertController, animated: false, completion:nil) 
} 
+0

Где именно добавить это? – Mariah

+0

На каждом месте, где вы хотите представить предупреждение. В вашем случае на каждом 'case' – garanda

+0

я попробовал, он дал мне ту же ошибку в консоли! – Mariah

0

Для добавления оповещения контроллера добавить этот глобальный метод в любом из вашего помощника класс.

func popAlertMessageController(VC:(UIViewController), title:(String), message:(String)) { 
    let alertController:UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    let ok:UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { (action) -> Void in 
     alertController.dismissViewControllerAnimated(true, completion: nil) 
    } 
    alertController.addAction(ok) 
    VC.presentViewController(alertController, animated: true, completion: nil) 
} 

И вы можете вызвать этот метод из любого места вам требуется для предупреждения следующим образом:

popAlertMessageController(self, title: "Alert", message: "Your message") 
Смежные вопросы