尝试显示其视图不在窗口层次结构中的UIAlertController

时间:2017-12-24 08:04:01

标签: ios swift xcode uialertcontroller uialertaction

更具体地说,我得到的错误警告是:

->nullable()

我目前正在创建一个注册页面,要求用户填写一些特定的详细信息,如姓名,国家/地区,电子邮件,密码等。为确保用户提供所有相关信息,我正在尝试编写代码来发送提醒如果用户没有提供所有信息。我已经从libeoverflow中获取了帮助。

问题:每当用户将任何字段留空时,它都不显示警报,默认情况下执行一个让用户登录页面的segue。这是我第一次创建警报,因此不会出现问题(我相信95%的代码都已到位)

任何人都可以帮忙吗?

Attempt to present UIAlertController whose view is not in the window hierarchy!

2 个答案:

答案 0 :(得分:0)

动作可能超出主线程

  DispatchQueue.main.async {

  ///print errror message
   let alertController = UIAlertController(title: "Error",    message: error?.localizedDescription, preferredStyle: .alert)

   let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
   alertController.addAction(defaultAction)

  self.present(alertController, animated: true, completion: nil)


}

尝试这种方法

检查那样的空白区域

 let nameTrimmed = self.nameText.text?.trimmingCharacters(in: .whitespacesAndNewlines)

 let genderTrimmed = self.genderText.text?.trimmingCharacters(in: .whitespacesAndNewlines)

 let countryTrimmed = self.countryText.text?.trimmingCharacters(in: .whitespacesAndNewlines)

 let schoolTrimmed = self.schoolText.text?.trimmingCharacters(in: .whitespacesAndNewlines)



 if  nameTrimmed.text == "" ||  genderTrimmed.text == "" ||   countryTrimmed.text == "" ||  schoolTrimmed.text == "" 

答案 1 :(得分:0)

@IBAction func registerPressed(_ sender: Any) {

    if nameText.text!.isEmpty || genderText.text!.isEmpty || countryText.text!.isEmpty || yourSchool.text!.isEmpty || yourClass.text!.isEmpty {

        print("Please fill all fields") //my code is printing this error

        //alert message popup

        let alertController = UIAlertController(title: "Error", message: "Please fill all fields", preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action:UIAlertAction) in
        print("Okay")
        }))

        let alertWindow = UIWindow(frame: UIScreen.main.bounds)
        alertWindow.rootViewController = UIViewController()
        alertWindow.windowLevel = UIWindowLevelAlert
        alertWindow.makeKeyAndVisible()
        alertWindow.rootViewController?.present(alertController, animated: true, completion: nil)


    }

    else {

        Auth.auth().createUser(withEmail: yourEmail.text!, password: yourPassword.text!) { (user, error) in

                    if error != nil {

                        ///print errror message

                        let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
                        alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action:UIAlertAction) in
                            print("Okay")
                        }))

                        let alertWindow = UIWindow(frame: UIScreen.main.bounds)
                        alertWindow.rootViewController = UIViewController()
                        alertWindow.windowLevel = UIWindowLevelAlert + 1;
                        alertWindow.makeKeyAndVisible()
                        alertWindow.rootViewController?.present(alertController, animated: true, completion: nil)

                    }

                    else {

                        print("You have successfully signed up")

                        self.performSegue(withIdentifier: "JoinUs2SignPage", sender: self)

                        //updating user information
                        let userID = Auth.auth().currentUser!.uid
                        let usertype: String = "Student"
                        self.ref.child("users").child(userID).setValue(["usertype": usertype ,"username": self.nameText.text!, "usergender": self.genderText.text!, "usercountry": self.countryText.text!, "userschool": self.yourSchool.text!, "userclass": self.yourClass.text!,])
                        }
            }
        }

}