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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

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

Q&A

解決済

2回答

1314閲覧

objective-cのMKMapViewでの経路、ピン表示の複数について

nelos

総合スコア7

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

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

0グッド

0クリップ

投稿2017/02/03 07:41

###前提・実現したいこと
お世話になります。

いまObjetive-cでGPS機能を実装中です。
サーバから取得した複数人の座標情報をピン、経路で一括表示しようとしています。

例:
山田のピン、経路(赤色)
佐藤のピン、経路(緑色)
田中のピン、経路(黄色)

###発生している問題・エラーメッセージ

取得した複数の情報をピン、経路表示しようとすると

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

と出てクラッシュします。

###該当のソースコード

Objective

1 2 // 要素数(ピン数 NSMutableArray) 3 int ct = (int)maTimes.count; 4 CLLocationCoordinate2D coords[ct]; 5 6 for(int j = 0 ; j < ct ; j++){ 7 // pin 8 MyAnnotation* st = [[MyAnnotation alloc] init]; 9 float lla = [NSString stringWithFormat:@"%@",maLatitude[j]].floatValue; 10 float llo = [NSString stringWithFormat:@"%@",maLongitude[j]].floatValue; 11 st.coordinate = CLLocationCoordinate2DMake(lla, llo); 12 st.title = [NSString stringWithFormat:@"%@",msName]; 13 14 // add annotations to map 15 [mk_mv addAnnotation:st]; 16 17 coords[j] = CLLocationCoordinate2DMake(lla, llo); 18 } 19 20 MKPolyline *line = [MKPolyline polylineWithCoordinates:coords count:ct]; 21 22 // add Overlays to map 23 [mk_mv addOverlay:line];

###試したこと

・ピンのみにした場合
// [mk_mv addOverlay:line];
→クラッシュしません。

・一定時間おいて起動後のCPU過多時を避けてみました
→クラッシュしました。

よろしくお願いいたします…。

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

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

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

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

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

guest

回答2

0

UIを触るときはメインスレッドじゃないとダメです。
completionHandlerの中はメインスレッドではありませんので、

objectivec

1dispatch_async(dispatch_get_main_queue(), ^{ 2 //ここでaddして下さい 3});

これでいけるんじゃないかと思います。

投稿2017/02/03 09:11

fuzzball

総合スコア16731

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

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

nelos

2017/02/03 09:56

ありがとうございます! なんとかなりました。
guest

0

自己解決

objective

1NSURLSessionDataTask *URLSessionDataTask = [URLSession 2 dataTaskWithRequest:request 3 completionHandler:^(NSData *data, 4 NSURLResponse *response, 5 NSError *error){ 6 // ここに直接処理を書いていました。 7 }]; 8

自己解決しました。

経路表示処理をデータ受け取りタイミングで行ったのが悪かったのか
nstimerを使い、タイミングをずらしてピン、経路表示処理を行うことで解決しました。

スペースありがとうございました!

投稿2017/02/03 09:03

nelos

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問