2

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

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] }

而且我知道数据变量不是零

4

2 回答 2

1

根据sendAsynchronousRequest文档,回调中的responsedataerror变量都是隐式解包的选项。如果其中任何一个为 nil,则会在运行时引发致命错误。

要解决此问题,请将它们定义为回调块中的普通选项,并像往常一样使用可选绑定或值检查将它们解包。

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
    (response: NSURLResponse?, data: NSData?, error: NSError?) in
    // ...
}
于 2014-11-05T20:14:04.433 回答
0

该请求工作正常,但我怀疑响应不是因为 invalid formatted "URL OF A PHP FILE"。处理这个的代码data是崩溃的。

data当通过编码为 nil 和无效 URL时,我可以生成相同的错误(我在 AppDelegate 上测试了代码)data

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

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

if let notNilData = data {
    let dataStr = NSString(data: notNilData, encoding: NSUTF8StringEncoding)
} else {
    print("nil data")
}
于 2014-11-03T02:15:31.363 回答