【问题标题】:Having issues making HTTP request and simple auth swift快速发出 HTTP 请求和简单身份验证时遇到问题
【发布时间】:2014-12-18 20:52:55
【问题描述】:

我对 obj c/swift 非常陌生,并尝试连接到 RESTful api 并在这一点上不断收到致命错误“在展开可选值时意外发现 nil”:

var request = NSURLRequest(URL: url!)

我正在使用这个示例来完成任务 - https://stackoverflow.com/a/24495548/4375598。我正在尝试使用用户名和密码登录到带有 url 中私有 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)")
}

【问题讨论】:

    标签: swift


    【解决方案1】:

    您使用的 URL ("MY URL") 应该格式正确,并且根据 Apple 的规定,应符合 RFC2396

    如果 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)
    }
    

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

    【讨论】:

      【解决方案2】:

      我假设你有一个实际的 URL 传递给你的 NSURL 初始化程序?您正在强制解开该 url,这可能是“意外发现 nil”错误的原因,因为 NSURL 的初始化程序可能会失败。如果可选有效,则使用if let 绑定解包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2018-08-27
        • 2023-04-07
        相关资源
        最近更新 更多