sendAsynchronousRequest表示在解包可选值时它会找到nil

时间:2014-10-31 19:33:06

标签: ios swift sendasynchronousrequest

这是我崩溃的代码的一部分:

let bodyData = "username=" + username + "&password=" + password

let URL: NSURL = NSURL(string: "URL OF A PHP FILE")!
let request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "POST"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) // Crashes here !
{
    (response, data, error) in

    var output = NSString(data: data, encoding: NSUTF8StringEncoding)

    [Rest of the code]
}

错误是:

fatal error: unexpectedly found nil while unwrapping an Optional value

我认为是NSURLConnection.sendAsynchronousRequest使我的应用程序崩溃导致我调试了我的应用程序并且它崩溃了

这是请求的值:

<NSMutableURLRequest: 0x14d55b70> { URL: [URL OF PHP FILE] }

我知道数据变量不是nil

2 个答案:

答案 0 :(得分:1)

根据sendAsynchronousRequest documentation,回调中的responsedataerror变量都是隐式解包的选项。如果它们中的任何一个为零,则会在运行时抛出致命错误。

要解决此问题,请将它们定义为回调块中的正常选项,并使用可选的绑定或值检查照常打开它们。

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
    (response: NSURLResponse?, data: NSData?, error: NSError?) in
    // ...
}

答案 1 :(得分:0)

请求工作正常,但我怀疑响应不是因为格式化"URL OF A PHP FILE"无效。处理此data的代码是崩溃的代码。

我可以在data为零时生成相同的错误(我在AppDelegate上测试了代码),并通过编码data生成无效的网址

let dataStr = NSString(data: data, encoding: NSUTF8StringEncoding)

如果事先进行安全检查,它不会崩溃:

if let notNilData = data {
    let dataStr = NSString(data: notNilData, encoding: NSUTF8StringEncoding)
} else {
    print("nil data")
}