表題通り、エンコードしないでAlamofireでGETで呼び出すと落ちる。(Alamofireに限らない。)
エラーメッセージが不親切ですぐわかんなかった。
突然の死でした。
環境
- Swift 2.2
- Xcode 7.3
- Alamofire 3.3
現象 / ソースコード
エラー
fatal error: unexpectedly found nil while unwrapping an Optional value
ソースコード
以下メソッドに渡すurlを日本語等のマルチバイト文字を含むものにすると落ちる。
hoge.swift
func send(url : String){
Alamofire.request(.GET, url)
.responseJSON { (response) -> Void in
guard let object = response.result.value else {
return
}
}
}
サンプル呼び出し
hoge.swift
let url = "https://www.google.co.jp/#safe=off&q=あいふぉんクレイドル"
self.send(url)
対策後コード
hoge.swift
func send(url : String){
// これ追加👇
let encodedUrl = url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
Alamofire.request(.GET, encodedUrl)
.responseJSON { (response) -> Void in
guard let object = response.result.value else {
return
}
}
}
原因/参考
Alamofire crashes when url param contains special character (umlaut) #1195
iOSでパーセントエンコード(Swift)