質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.58%

iPhoneアプリの実機確認でエラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 809

score 18

マップアプリを作ってシミュレーター上ではうまく行っていた動作が実機確認をしたところエラーが出てうまく行きません。

AlamofireとSwiftyJsonを使ってAPIを叩いているのですがその中でエラーが発生しています。

Alamofire.request(directionURL).responseJSON
            { response in

                if let Json = response.result.value {
                    let json = JSON(Json)

                    for i in (0..<100){
                        if var minutestr = json["routes"][0]["legs"][0]["steps"][i]["duration"]["text"].string{
                            if let range1 = minutestr.range(of: " mins") {
                                minutestr.removeSubrange(range1)
                            }

                            if let range2 = minutestr.range(of: " min") {
                                minutestr.removeSubrange(range2)
                            }

                            let minute:Int = Int(minutestr)! //ここでエラー
                                if(minute<=5){
                                    time.append(minute)
                                }else if(minute>5){                    
                                    if let points = json["routes"][0]["legs"][0]["steps"][i]["polyline"]["points"].string{
                                        var lat5minute:Double = 0.0
                                        var lon5minute:Double = 0.0
                                        time.append(5)

                                        var remtime:Int = minute-5
                                        (lat5minute,lon5minute) = self.zahyoureturn5minute(points: points,key: 1)
                                        intervalcoord[0].append(lat5minute)
                                        intervalcoord[1].append(lon5minute)
                                        for i in(1..<100){
                                            if(remtime>5){
                                                time.append(5)
                                                remtime -= 5
                                                (lat5minute,lon5minute) = self.zahyoureturn5minute(points: points, key: i+1)
                                                intervalcoord[0].append(lat5minute)
                                                intervalcoord[1].append(lon5minute)
                                                let position = CLLocationCoordinate2DMake(lat5minute, lon5minute)
                                                let marker = GMSMarker(position: position)
                                                marker.icon = GMSMarker.markerImage(with: .black)
                                                marker.map = googleMap


                                        }else if(remtime<=5){
                                            time.append(remtime)
                                            break
                                        }

                                    }

                                }

                            }

                        }

エラー内容はFatal error: Unexpectedly found nil while unwrapping an Optional
と出ています。これについて調べると予期しないnil値が出た時のエラーだと分かりました。
minutestrの値がシミュレーターではnilでは無かったのに実機に写したらnilになった原因は何なのでしょうか。御教授願います。

本来ならminutestrにはString型で数+minと入ります。(例: 5min)
ここがnil値になるということは実機ではAPIが使えていないということになるのでしょうか

minutestrをシミュレータで出力した場合
minstr 3
minstr 1
minstr 2
minstr 1
minstr 10
minstr 2
minstr 5

minutestrを実機で出力した場合
minstr 3分
(lldb) 

と最初の以降が拾えていないようです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • bbb04

    2018/01/29 14:28

    はい,今結果を更新させていただきましたが今回は7です

    キャンセル

  • fromageblanc

    2018/01/29 14:36

    7の場合7回以上回ったらダメですよね

    キャンセル

  • bbb04

    2018/01/29 14:44

    解決しました。問題はminutestrの返してくる言語の違いだったようです。お騒がせしました。ありがとうございます。

    キャンセル

回答 1

check解決した方法

0

返ってくるJsonの値がシミュレータの場合 ~mins であるのに対して実機の時には ~分だったことが原因だったようです。お騒がせしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る