有问题发出HTTP请求和简单的auth swift

时间:2014-12-18 20:52:55

标签: swift

我对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)")
}

2 个答案:

答案 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)
}

要立即解决您的问题,请确保您的网址格式正确