2012-10-14 60 views
0

因此,我使用地圖爲聯繫人中具有地址的每個人添加點,並且我有點難以確定如何爲其設置未知數量的聯繫人。現在按照我設置的方式,它只是爲列表中的最後一個聯繫人添加一個PIN。這裏是一些代碼:address是一個從addressProperty設置的字符串。將未知數量的註釋添加到MKMapView中

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]; 
      } 
         }]; 
    } 

所以,當我運行應用程序,我可以看見針在每個位置被設置並移動到下一個位置,直到它在列表中的最後位置結束。我怎樣才能爲每個點添加一個點?我相信這是一個簡單的解決方案,但它現在正在逃避我。

回答

1

必須有一個環繞所有這些要經歷所有聯繫人。 是CLGeocoder嗎?您不應將兩個geocodeAddressString函數設置爲使用相同的地理編碼器,您需要爲每個地理編碼初始化一個新的地理編碼(除非您確實知道以前的地理編碼是異步的,已完成)。其他

四個問題:

  • point變量是每次相同。當你改變座標時,你會在地圖上的不同位置出現這個點,但它是同一個座標,所以你在任何時候都不會在地圖上看到更多的東西。
  • 因爲它是異步運行的,所以應該在塊之外寫入和讀取一個變量。現在,兩個地理編碼可以同時獲得響應,一個地址可以設置self.placeMarkData,就像另一個正在從中讀取location.coordinate一樣。
  • 什麼是pin用於?
  • 在完成填充之前,不要打擾將array添加到地圖。如果你想盡快在屏幕上的點,然後單獨添加到地圖。添加整個數組,然後向數組中添加另一個內容並再次添加整個數組是浪費時間。
+0

是的,它是在一個循環內獲取聯繫人和位置是一個CLGeocoder。所以我需要一個新的地理編碼器爲每個不同的地址字符串?是的,我明白你對這個陣列的意思,我只是想念那個。我還需要爲每個地址添加一個新的點對象嗎? –

+0

每次將某些東西放入數組時,都需要創建一個新點,以便每次都不修改相同的點。是的,每個地址字符串都需要一個新的CLGeocoder,但只有在這樣的緊密循環中進行時纔是如此。如果您只發送一個地址,並在發送下一個響應之前收到響應,那麼您可以只使用一個CLGeocoder來處理所有事情。 – Craig

+0

好吧,我想我可以與之合作,謝謝你的幫助。 –

0

看起來像你的代碼中的一個簡單的錯誤。你可以嘗試移動for循環之外的[map addAnnotations:array];行嗎?