【问题标题】:What have I missed ?? fatal error unexpected nil found while unwrapping我错过了什么??展开时发现致命错误意外 nil
【发布时间】:2015-05-10 19:51:08
【问题描述】:
@IBOutlet var txtusername: UITextField!
@IBOutlet var txtpassword: UITextField!

@IBAction func SigninTapped(sender: UIButton)
{
   var username:NSString = txtusername.text
    var password:NSString = txtpassword.text
  if (self.txtusername.text.isEmpty)
    {

        (UIAlertView(title: "Fields cant be empty", message: "Please Enter email id and password",
            delegate: nil, cancelButtonTitle: "OK").show())
        return
    }
    else if (range==nil)
    {
        (UIAlertView(title: "Invalid Email Id", message: "Please enter correct email id", delegate: nil, cancelButtonTitle: "OK").show())
        return
    }
    else if (txtpassword.text == ""  )
    {

        var alertView:UIAlertView = UIAlertView()
        alertView.title = "Failed!"
        alertView.message = "Please enter Password"
        alertView.delegate = self
        alertView.addButtonWithTitle("OK")
        alertView.show()
        return
    }
    else
    {
        var url:NSURL = NSURL(string:"http://192.168.0.31:8097/api/user/GetValidateUser" + "/" + username + "/" + txtpassword.text)!

        var err:NSError?
        var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "GET"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type");
        request.addValue("application/json", forHTTPHeaderField: "Accept");
        var reponseError: NSError?
        var response: NSURLResponse?
        var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)


        if ( urlData != nil )
        {
            let res = response as NSHTTPURLResponse!;

            var responseData:NSString  = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
            NSLog("Response code: %ld", res.statusCode);
            //var   message :String = "Valid user"
            if (res.statusCode == 200)
            {
                if(responseData != "\"Valid user\"")
                {
                    var alertView:UIAlertView = UIAlertView()
                    alertView.title = "Failed"
                    alertView.message = responseData
                    alertView.delegate = self
                    alertView.addButtonWithTitle("OK")
                    alertView.show()
                    return;
                }
                //Get the address book reference
                //GabbersController().GetAddressBook()

                //  var alertView:UIAlertView = UIAlertView()
                //   alertView.title = "Sign in Message"
                //  alertView.message = responseData
                //  alertView.delegate = self
                //  alertView.addButtonWithTitle("OK")
                //  alertView.show()
            }

            else {
                var alertView:UIAlertView = UIAlertView()
                alertView.title = "Failed"
                alertView.message = responseData;
                if let error = reponseError {
                    alertView.message = (error.localizedDescription)
                }
                alertView.delegate = self
                alertView.addButtonWithTitle("OK")
                alertView.show()
            }


        }

        else {
            var alertView:UIAlertView = UIAlertView()
            alertView.title = "Failed"
            alertView.message = "Connection failure";
            if let error = reponseError {
                alertView.message = (error.localizedDescription)
            }
            alertView.delegate = self
            alertView.addButtonWithTitle("OK")
            alertView.show()


        }
        //self.performSegueWithIdentifier:@"Goto__Gabbers" sender:self;

    }


}

对于上面的代码,我遇到了突然的错误,因为我认为我可能错过了参考出口,删除了现有的参考出口,并在我运行应用程序时在我的故事板中再次创建了同样的错误,但没有得到我实际上错过的内容。它第一次执行得很好,但后来却没有,抛出致命的意外 nil 错误,谁能告诉我这里到底错过了什么。

这是我得到的确切错误:

致命错误:在展开可选值时意外发现 nil

贴出我的完整代码

【问题讨论】:

  • 顺便可以用var url:NSURL = NSURL(string:"http://192.168.0.31:8097/api/user/GetValidateUser/\(txtusername.text)/\(txtpassword.text)")!

标签: ios swift


【解决方案1】:

根据 Swift1.2,您可以执行以下操作。

@IBOutlet var txtusername: UITextField!
@IBOutlet var txtpassword: UITextField!

@IBAction func SigninTapped(sender: UIButton)
{
   if let userName = txtusername.text as? String, let password = txtpassword.text as? String {

    var url:NSURL = NSURL(string:"http://192.168.0.31:8097/api/user/GetValidateUser" + "/" + userName + "/" + password)!
    var err:NSError?
   }
}

【讨论】:

  • 这是一个很好的答案,不幸的是,基于 OP 的前提,if 将失败,因为 txtusername.texttxtpassword.text 将为零,否则代码应该运行完美。赞成。
  • 我无法获取 @Schemetrical B'coz 文本字段的文本属性返回字符串,所以我们必须将 Y 定义为字符串??你能解释一下吗?
  • 没有得到解决方案的人会花费更多时间帮助我,我还有很多事情要做......
  • @NaveenKumar 检查txtpassword.text 是否为零。
  • 这两行可能会崩溃。 var username:NSString = txtusername.text 和 var password:NSString = txtpassword.text。因为根据声明,这两个变量不是可选的,但是您正在分配可选的值。同样,确保所有其他地方(如果可选)都在那里,确保你照顾好它。
【解决方案2】:

此时txtusername.texttxtpassword.text 可能是nil

你必须检查这两个值是否都不为零,然后你可以做var url:NSURL = NSURL(string:"http://192.168.0.31:8097/api/user/GetValidateUser/\(txtusername.text)/\(txtpassword.text)")!

【讨论】:

  • 实际上我检查了非空条件然后允许但有问题我没有提到那些事情
  • 你确定吗?只有当它们中的任何一个为 nil 时才会发生。
  • 甚至我尝试通过分配变量 n 将这些变量传递给 url 没有使用相同的错误
  • 当然将它们分配给变量是没有帮助的。我建议您发布完整的代码,详细说明您检查值以及它们是否不为零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多