2017-06-03 28 views
0

我在斯威夫特3得到以下错误:试图提出alertcontroller谁的观点是不是在窗口层次

Attempt to present alertcontroller whose view is not in window hierarchy 

我已经提到的其他职位有关这个主题无济于事。更具体地说,我已经实施了本文中建议的更改:AlertController is not in the window hierarchy

而且我仍然收到相同的错误。

我所做的是:

  1. 创建AlertHelper.swift辅助类:

    class AlertHelper { 
    

    FUNC showAlert(fromController控制器:UIViewController中){ 设警报= UIAlertController(标题: “请再试一次”,消息:“电子邮件已在使用中”,preferredStyle:.alert) controller.present(alert,animated:true,completion:nil) } }

  2. 在我的View Controller中,按下按钮时调用的函数下,检查用户输入的电子邮件地址是否已存储在我的Firebase数据库中,如果存在,我尝试呈现在“电子邮件已在使用”警报从AlertHelper类:

    Auth.auth().createUser(withEmail: email, password: password) { (user, error)  in 
         if error != nil { 
          if let errCode = AuthErrorCode(rawValue: error!._code) { 
           switch errCode { 
           case .emailAlreadyInUse: 
            let alert = AlertHelper() 
            alert.showAlert(fromController: self) 
            return 
           default: 
            print("other error") 
           } 
          } 
         } 
         else { 
          // Inputs user email into database 
          self.ref.child("Users").child((user?.uid)!).setValue(["Email": email, "Location": ""]) 
          self.performSegue(withIdentifier: "todorm", sender: self) 
         } 
        } 
    

数据库东西的作品,未出现的唯一的事情就是报警。有任何想法吗?谢谢!!

回答

0

将你的警报继承到一个单独的类是一种奇怪的做法。

你应该尝试做的方法在你的ViewController类

func showAlert() { 
    let alert = UIAlertController(title: "Please Try Again", message: "Email Already In Use", preferredStyle: .alert) 
    self.present(alert, animated: true, completion: nil) 
} 

呼叫使用方法:

self.showAlert() 
+0

我试过这个方法也和我仍然得到同样的UIAlertController不能在窗口层次错误。以下是一件奇怪的事情:当我尝试在简单的if-else语句中显示警报时,它会起作用。但是,当我尝试在嵌套在另一个函数调用(如上所示)中的if语句中显示警报时,出现错误。 –

+0

检查createUser方法是否创建控制器实例。它可能会在现有的控制器之上显示一个新的控制器,因此当您尝试在现有的控制器上显示时,会发生错误。 –

+0

我怀疑是这种情况。如果是这样,我将如何解决它? –

相关问题