Включение / выключение наложения MapKit нажатием той же кнопки? - PullRequest
2 голосов
/ 22 июля 2011

У меня есть 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");
}
}

Этот код работает один раз, чтобы добавить оверлей, и один раз, чтобы удалить его. После этого (после просмотра выходных данных журнала) кажется, что функция (кнопка) думает, что MapView все еще имеет наложения, и, следовательно, ей необходимо их удалять (даже если их больше нет).

Заранее спасибо за любую помощь!

1 Ответ

2 голосов
/ 22 июля 2011

Попробуйте вместо этого проверить count массива оверлеев:

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

Без проверки count массив overlays может быть не нулевым, но не иметь объектов.

...