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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1110閲覧

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

bbb04

総合スコア18

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/01/29 03:18

編集2018/01/29 05:28

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

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

Swift

1Alamofire.request(directionURL).responseJSON 2 { response in 3 4 if let Json = response.result.value { 5 let json = JSON(Json) 6 7 for i in (0..<100){ 8 if var minutestr = json["routes"][0]["legs"][0]["steps"][i]["duration"]["text"].string{ 9 if let range1 = minutestr.range(of: " mins") { 10 minutestr.removeSubrange(range1) 11 } 12 13 if let range2 = minutestr.range(of: " min") { 14 minutestr.removeSubrange(range2) 15 } 16 17 let minute:Int = Int(minutestr)! //ここでエラー 18 if(minute<=5){ 19 time.append(minute) 20 }else if(minute>5){ 21 if let points = json["routes"][0]["legs"][0]["steps"][i]["polyline"]["points"].string{ 22 var lat5minute:Double = 0.0 23 var lon5minute:Double = 0.0 24 time.append(5) 25 26 var remtime:Int = minute-5 27 (lat5minute,lon5minute) = self.zahyoureturn5minute(points: points,key: 1) 28 intervalcoord[0].append(lat5minute) 29 intervalcoord[1].append(lon5minute) 30 for i in(1..<100){ 31 if(remtime>5){ 32 time.append(5) 33 remtime -= 5 34 (lat5minute,lon5minute) = self.zahyoureturn5minute(points: points, key: i+1) 35 intervalcoord[0].append(lat5minute) 36 intervalcoord[1].append(lon5minute) 37 let position = CLLocationCoordinate2DMake(lat5minute, lon5minute) 38 let marker = GMSMarker(position: position) 39 marker.icon = GMSMarker.markerImage(with: .black) 40 marker.map = googleMap 41 42 43 }else if(remtime<=5){ 44 time.append(remtime) 45 break 46 } 47 48 } 49 50 } 51 52 } 53 54 }

エラー内容は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)

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fromageblanc

2018/01/29 04:55

ほんとに実機だからダメなのでしょうか。ループのマックスが100になってますが、json["routes"][0]["legs"][0]["steps"]をカウントした結果はどうなりますか?
bbb04

2018/01/29 05:16

var strcount:Int = 0 for i in(0..<100){ if var minutestr = json["routes"][0]["legs"][0]["steps"][i]["duration"]["text"].string{ strcount += 1 } } を加えてstrcountをループ回数にしてみましたが同じエラー結果になりました
bbb04

2018/01/29 05:18

見にくくてすいません。確認したらstrcountにはカウントした結果が入ってましたのでループ回数の問題では無いようです。
bbb04

2018/01/29 05:28

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

2018/01/29 05:36

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

2018/01/29 05:44

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

回答1

0

自己解決

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

投稿2018/01/29 05:46

bbb04

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問