我对obj c / swift很新,并试图连接到RESTful api并继续致命错误"意外地发现nil,同时解开一个Optional值"在这一点上:
var request = NSURLRequest(URL: url!)
我正在使用此示例来完成任务 - https://stackoverflow.com/a/24495548/4375598。我正在尝试使用用户名和密码登录到网址中包含私有api_key的应用。
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)")
}
答案 0 :(得分:0)
我假设您有一个传递给NSURL初始化程序的实际网址?你是强行打开那个可能导致意外发现的原因的网址。错误,因为NSURL的初始化程序可能会失败。如果有效,请使用if let
绑定来打开可选项。
答案 1 :(得分:0)
您使用的网址("MY URL"
)应格式正确,并且根据Apple的规定,请遵守RFC2396。
如果网址格式不正确,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)
}
要立即解决您的问题,请确保您的网址格式正确