很抱歉我的虚拟问题,但我是Swift开发的新手,我有一个关于Swift 1.1的项目,该项目工作正常但在升级到Xcode到7.3.1(使用Xcode 2.2.1)后,我的项目已成功构建但是我在使用以下代码运行它(在let请求行上)时遇到错误:
// Send HTTP GET Request
let request = NSURLRequest(URL: NSURL(string: "http://11.22.33.44:8080/MySRV/login?email=\(emailField.text)&password=\(pwdField.text)")!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{
(response: NSURLResponse?, data: NSData?, error: NSError?)-> Void in
print("response \(response?.description)")
错误是:
线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0) 致命错误:在解包可选值时意外发现nil
我可以想象我的请求是零,但我不知道如何解决它。
感谢您的帮助。
答案 0 :(得分:3)
从这里开始看起来你打开了一个nil的可选值。试试这个:
if let url: NSURL = NSURL(string: "http://11.22.33.44:8080/MySRV/login?email=\(emailField.text)&password=\(pwdField.text)") {
let request = NSURLRequest(URL: url)
// Do asynchronous request here
} else {
// NSURL is incorrect
}
这是您可以在Swift中安全地展开可选值的方法。您可能还想检查emailField.text和pwdField.text是否也不是nil值。它看起来像这样:
if let email: String = emailField.text {
// Text is not nil
} else {
// UITextField text is nil!
}
在else块中,您可以添加逻辑以通知用户输入文本或执行其他操作。您可以阅读有关此here的更多信息。
希望这有帮助!
答案 1 :(得分:0)
问题可能是因为您的两个文本字段的text
属性是选项,因此会以Optional("user@domain.com")
和Optional("password")
的形式添加到您的网址中,因此,构建URL的尝试失败了。
您可以执行以下操作:
guard let email = emailField.text else {
print("email is `nil`")
return
}
guard let password = pwdField.text else {
print("password is `nil`")
return
}
let request = NSURLRequest(URL: NSURL(string: "http://11.22.33.44:8080/MySRV/login?email=\(email)&password=\(password)")!)