2011-07-22 12 views
2

MapViewには、MapViewにオーバーレイを追加するツールバーボタンがあります。私が望むのは、ボタン(IBAction)が既に地図上にオーバーレイがあるかどうかを確認し、もし削除されていればそれを追加するかどうかをチェックすることです。次のようにオーバーレイを追加同じボタンを押してMapKitオーバーレイのオン/オフを切り替えますか?

私の現在のコードは次のとおりです。

- (IBAction)waterWaysAction:(id)sender 
{ 
NSLog(@"WaterWays pushed"); 

if ([mapView overlays]) { 
    [mapView removeOverlays:[mapView overlays]]; 
    NSLog(@"WaterWays removed"); 
} else { 
// ******* adds the overlays for the waterways ********** 
// inner harbor 
CLLocationCoordinate2D innerHarborPoints[13] = { 
    CLLocationCoordinate2DMake(43.02313691051886, -87.90539558418189), 
    CLLocationCoordinate2DMake(43.0213450482963, -87.90596442438722), 
    CLLocationCoordinate2DMake(43.01721422337822, -87.90249007832719), 
    CLLocationCoordinate2DMake(43.0141641230024, -87.90402523886414), 
    CLLocationCoordinate2DMake(43.00858391833174, -87.8971780500095), 
    CLLocationCoordinate2DMake(43.016711699807, -87.90156448365555), 
    CLLocationCoordinate2DMake(43.01692320142091, -87.90093306118753), 
    CLLocationCoordinate2DMake(43.02204743639911, -87.90385746629964), 
    CLLocationCoordinate2DMake(43.02400128319255, -87.90186558765494), 
    CLLocationCoordinate2DMake(43.02441284233703, -87.89897827382163), 
    CLLocationCoordinate2DMake(43.02564995691736, -87.89925323299293), 
    CLLocationCoordinate2DMake(43.02549123239004, -87.90378517804325), 
    CLLocationCoordinate2DMake(43.02313691051886, -87.90539558418189)}; 
MKPolygon *innerHarborPolygon = [MKPolygon polygonWithCoordinates:innerHarborPoints count:13]; 
innerHarborPolygon.title = @"Inner Harbor"; 
[mapView addOverlay:innerHarborPolygon]; 
NSLog(@"WaterWays added"); 
} 
} 

このコードは、オーバーレイを追加するには1時間に動作し、それを削除するには1時間。その後(ログ出力の表示から)、関数(ボタン)はMapViewにまだオーバーレイがあると思っているように見えるため、(たとえそこにいなくても)MapViewを削除し続ける必要があります。

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

答えて

2

ではなく、オーバーレイ配列のcountチェックしてみてください。countをチェックせずに

if ([[mapView overlays] count] > 0) { 

を、overlays配列ではなく、nilになりますが何のオブジェクトを持つことはできません。

+0

美しい!できます!ありがとうございました! –

関連する問題