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 だと思います。アプリをデバッグしたところ、そこでクラッシュしました

これは request の値です:

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

そして、データ変数が nil ではないことを知っています

4

2 に答える 2

1

sendAsynchronousRequestドキュメントによると、コールバックのresponsedata、およびerror変数はすべて、暗黙的にラップ解除されたオプションです。それらのいずれかが nil の場合、実行時に致命的なエラーがスローされます。

これを修正するには、コールバック ブロックで通常のオプショナルとして定義し、オプショナル バインディングまたは値チェックを使用して通常どおりアンラップします。

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

リクエストは正常に機能していますが、レスポンスは無効なフォーマットのためではないと思われます"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 に答える