0

そのため、連絡先に住所がある人ごとにポイントを追加するためにマップを使用していますが、連絡先の数が不明な場合にどのように設定するかを理解するのに少し苦労しています。今のところ、私が設定した方法では、リストの最後の連絡先のピンを追加するだけです。ここにいくつかのコードがあります:addressはaddressPropertyから設定される文字列です。

if(addressProperty != nil)
       {
           [location geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
            NSMutableArray *array = [[NSMutableArray alloc]init];

            for(int a = 0; a < [placemarks count]; a++)
            {

               self.placeMarkData = [placemarks objectAtIndex:a];
                [point setCoordinate: self.placeMarkData.location.coordinate];

                [array addObject:point];
                pin.animatesDrop = YES;
                point.title = address;

                [map addAnnotations:array];
            }
                      }];
    }

そのため、アプリを実行すると、ピンが各場所に設定され、リストの最後の場所で終了するまで次の場所に移動していることがわかります。それぞれにポイントを追加するにはどうすればよいですか?それは簡単な解決策だと確信していますが、今は私にはわかりません。

4

2 に答える 2

1

すべての連絡先を通過するには、これらすべての周りにループが必要です。locationCLGeocoderですか?同じジオコーダーで2つのgeocodeAddressString関数を設定しないでください。実行している地理コードごとに、新しい関数を初期化する必要があります(非同期の前のジオコードが終了したことが確実でない限り)。

他の4つの問題:

  • 変数はpoint毎回同じです。座標を変更すると、そのポイントはマップ上のさまざまな場所に表示されますが、同じものであるため、いつでもマップ上に表示される以上のものは表示されません。
  • 非同期で実行されているため、ブロックの外側で変数の書き込みと読み取りを行う必要があります。現在、2つの地理コードが同時に応答を取得でき、一方はもう一方がlocation.coordinateを読み取っているのと同じようにself.placeMarkDataを設定します。
  • 何にpin使われますか?
  • array塗りつぶしが完了するまで、わざわざマップに追加しないでください。画面上のポイントをできるだけ早く必要な場合は、それらを個別にマップに追加します。アレイ全体を追加してから、アレイに別のものを追加して、アレイ全体を再度追加するのは無駄です。
于 2012-10-14T09:25:19.643 に答える
0

コードの単純なバグのようです。[map addAnnotations:array];行をforループの外側に移動してみてください。

于 2012-10-14T03:34:45.687 に答える