2

ツールバー ボタンを押したときに MapView にオーバーレイを追加する MapView があります。私が望むのは、ボタン (IBAction) がマップ上にオーバーレイが既に存在するかどうかを確認し、存在しない場合は削除して追加することです。

オーバーレイを追加する現在のコードは次のとおりです。

- (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 にまだオーバーレイがあると見なしているように見えるため、それらを削除し続ける必要があります (それらがもう存在しない場合でも)。

助けてくれてありがとう!

4

1 に答える 1

2

count代わりに、overlays 配列をチェックしてみてください。

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

をチェックしないcountと、overlays配列は非 nil である可能性がありますが、オブジェクトはありません。

于 2011-07-22T17:54:33.413 に答える