Swift 在进行HTTP请求和简单身份验证时遇到问题
我是obj c/swift的新手,尝试连接到RESTful api,并不断出现致命错误“在展开可选值时意外发现零”:Swift 在进行HTTP请求和简单身份验证时遇到问题,swift,Swift,我是obj c/swift的新手,尝试连接到RESTful api,并不断出现致命错误“在展开可选值时意外发现零”: var request = NSURLRequest(URL: url!) 我用这个例子来完成任务-。我正在尝试使用用户名和密码登录到url中包含私有api_密钥的应用程序 import UIKit class ViewController: UIViewController, NSURLConnectionDataDelegate { @IBOutlet weak var
var request = NSURLRequest(URL: url!)
我用这个例子来完成任务-。我正在尝试使用用户名和密码登录到url中包含私有api_密钥的应用程序
import UIKit
class ViewController: UIViewController, NSURLConnectionDataDelegate {
@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBAction func signInButton(sender: AnyObject) {
var url = NSURL(string: "MY URL")
var request = NSURLRequest(URL: url!)
var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)
}
func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge!) {
if challenge.previousFailureCount > 1 {
} else {
let creds = NSURLCredential(user: usernameTextField.text, password: passwordTextField.text, persistence: NSURLCredentialPersistence.None)
challenge.sender.useCredential(creds, forAuthenticationChallenge: challenge)
}
}
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse) {
let status = (response as NSHTTPURLResponse).statusCode
println("status code is \(status)")
}
我假设您已经有了一个实际的URL,并将其传递给NSURL初始值设定项?您正在强制展开该url,这可能是“意外发现零”错误的原因,因为NSURL的初始值设定项可能会失败。使用
if-let
绑定来打开可选的,如果它是有效的。您使用的URL(“我的URL”
)应该是格式良好的,并且根据苹果公司的说法,应该遵守
如果URL格式不正确,NSURL
将返回nil
。下一行将失败,因为您强制展开了url
变量(感叹号(!
)的用途)。如果您对设置为nil
的变量执行强制展开,如在NSURLRequest
中,您的应用程序将在运行时崩溃,返回“在展开可选值时意外发现nil”
如果要检查变量是否正确初始化且未设置为nil
,可以执行以下操作:
if let url = NSURL(string: "MY URL") {
var request = NSURLRequest(URL: url!)
var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)
}
else {
println("url is set to nil)
}
要立即解决您的问题,请确保您的url格式正确