这是我崩溃的代码的一部分:
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
答案 0 :(得分:1)
根据sendAsynchronousRequest
documentation,回调中的response
,data
和error
变量都是隐式解包的选项。如果它们中的任何一个为零,则会在运行时抛出致命错误。
要解决此问题,请将它们定义为回调块中的正常选项,并使用可选的绑定或值检查照常打开它们。
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")
}