2012-04-17 9 views
1

私は2つの場所の間に経路を描こうとしています。そのために私はCLLocation startPoin、endPoindという2つのインスタンスを持っています。私はこの2つの位置を2つの対応するLocation Address.Afterに変換して、Google map webserviceからすべてのルートポイントを取得したいと考えています。次のコードも同様でした。私は順序MKReverseGeocoderデリゲートメソッドは別のスレッドで動作していますか?

[self update:startPoint];  //MKReverseGeocoder start point 
    [self update:endPoint]; //MKReverseGeocoder end point   
    [self updateRoute]; 

残念ながら[自己updateRoute]でメソッドを呼び出していますのviewDidLoadで

​​

。最初にMKReverseGeocoderデリゲートメソッドと比較して実行されています。このメソッドでは、位置配列がnullです。 EXEBADACCESSの取得。どのように私はこの価値が来ることができます。 MKReverseGeocoderの中に私は場所の名前を持っています。 Delegateメソッドは他のスレッドを実行しています。

+0

MKReverseGeoCoderは、iOS 5.0では非推奨です。 CLGeoCoderを使用します。 –

答えて

2

MKReverseGeocoderはiOS 5では廃止予定ですので、おそらくCLGeocoderを使用してください。

これ以外にも、startメソッドは、の非同期です(ドキュメントに記載されています)。これは必ずしも別のスレッドで結果を得ることを意味するわけではありませんが、結果が利用可能になる前にメソッドが通常戻ってくることを意味します。

ジオコーダーを追跡して、両方が完了したときにupdateRouteメソッドを呼び出す必要があります。

+0

updateRoute内のNSLog()が最初に実行されました。現在のところ、私はios4で働いています – Musthafa

+0

あまりにもありがとう、この問題が来る可能性があります... – Musthafa

1

別のスレッドで実行されているかどうかは関係ありません。重要なことは、応答を受け取ったときに制御できないことです。

「開始ルートと終了ルートの両方の値を取得したら、updateRouteメソッドを呼び出す」と言うロジックが必要です。 endPoint(またはその逆)の値を取得したときにstartPoint変数の値が設定されていることを確認してから、updateRoute関数を呼び出すだけです。

+0

NSMutableArray(locations)でstartPointとendPoint iのReverseGecoderを呼び出すと、このlocation値はupdateRouteメソッド内でnullです – Musthafa

0

それでもこのは廃止されているにもかかわらず、これを使用したい場合....あなたは[locations count]あなたは値の両方を持っている場合NSURLConnectionが呼び出されます。この方法で2

である場合にのみ、- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemarkであなたの[self updateRoute];を呼び出す必要があります。

+0

これは私の仕事だと思っていますが、なぜこの問題が起こったのですか? – Musthafa

+0

NSURLConnectionは、MKReverseGeocoderからの値を取得する前であっても呼び出されます。 –

+0

第2の回答を参照してください。 – Musthafa

関連する問題