iOS Fatal error: Unexpectedly found nil while unwrapping an Optional value 解決

問題の箇所、oosakaの最後に空白が入っている。

f:id:happy_teeth_ago:20190829225618p:plain

ジオコーディングの問題の箇所

    override func mapAgent(
        _ mapAgent: MsMapAgent, detailedInfoRequested datPerson: DatPerson) {
        // 訪問先データへ:ピンが示す訪問先を渡す
        performSegue(withIdentifier: "toPersonDataPhn", sender: datPerson)
    }
    
    override func mapAgent(_ mapAgent: MsMapAgent, showGoogleMap datPerson: DatPerson) {

        let jusho = datPerson.jusho ?? ""
        let url = jusho != "" ?
            URL(string:"comgooglemaps://?q=\(jusho)&center=\(datPerson.latitude),\(datPerson.longitude)&zoom=14&views=traffic")!
            :
            URL(string:"comgooglemaps://?center=\(datPerson.latitude),\(datPerson.longitude)&zoom=14&views=traffic")!
        if (UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)) {
//            UIApplication.shared.openURL(url)
            UIApplication.shared.open(url, options: [:], completionHandler: {(success) in
                if (success){
                    NSLog(url.absoluteString)
                }
            })
        } else {
            MsAlert.confirmOk(self, "Cannot open Google Maps")
        }
    }

パーセントエンコードで解決できそう

qiita.com

解決 addingPercentEncoding関数を利用

    override func mapAgent(_ mapAgent: MsMapAgent, showGoogleMap datPerson: DatPerson) {
//jushoがあるならアンラップしてurlStringに代入 なければエルビス演算子
        let urlString: String = datPerson.jusho ?? ""
//jushoには、パーセントエンコーディングして代入 そうでなければ ""を代入
//addingPercentEncodingはオプショナル型なのでアンラップする必要がある
        let jusho: String = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""

        let url = jusho != "" ?
//ここで最後に空白が追加されていた。それが問題だった。jushoにパーセントエンコードして代入したのでOK!
            URL(string:"comgooglemaps://?q=\(jusho)&center=\(datPerson.latitude),\(datPerson.longitude)&zoom=14&views=traffic")!
            :
            URL(string:"comgooglemaps://?center=\(datPerson.latitude),\(datPerson.longitude)&zoom=14&views=traffic")!

チェックしてみる

今度は"Oosaka%20"となっている。空白がきちんとエンコードされている f:id:happy_teeth_ago:20190829225515p:plain