Проблема с делегированным методом представления карты 'mapView: regionDidChange:' не вызывать - PullRequest
3 голосов
/ 24 марта 2012

при использовании представления карты в моем приложении несколько раз метод MKMapKit делегата 'mapView: regionDidChange' не вызывал.Это происходит только когда я перетаскиваю карту.но когда я увеличиваю или уменьшаю масштаб, он работает отлично.Поэтому проблема создания связана с размещением новых аннотаций на карте при перетаскивании карты.Я сделал этот код в mapView:regionDidChange:

int j=0;

-(void) mapView:(MKMapView *)mapsView regionDidChangeAnimated:(BOOL)animated{

    zoomLevel = self.mapView.region.span.latitudeDelta;

    if (![appDelegate internetConnected]){
        return;
    }

    if (appDelegate.isMapViewRegionChanged) {
        if (j==0) {
            j++;
            return;
        }else{
            j=0;
            appDelegate.isMapViewRegionChanged  = FALSE;
            return;
        }
    }
    [self callGetMapViewWithObject:nil];
}


/*
first boolean is to check Internet connection.

[appDelegate internetConnected]

Second condition is to return when we navigate from any view controller too map View controller.

appDelegate.isMapViewRegionChanged

Third is a method to place new annotations. 

[self callGetMapViewWithObject:nil]; 

*/

Я проверил все условия и логические значения, но мое кодирование не является причиной этой ошибки.так может быть, его отношение к региону изменило метод.

Так что, используя мое приложение с картой, 20% времени оно ведет себя как идеально (метод не вызывается).

может кто-нибудь помочь мне с этим.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 сентября 2012

РЕДАКТИРОВАТЬ Произошел случайный сбой, так что теперь я снова вызываю функцию (отменяя то, что я сказал ниже), без дополнительных изменений ... и, гм, она работает. Я чувствую, что подбрасываю монету.

Я только что это произошло, потому что у меня есть подкласс MKMapView. Я не знаю, подкласс вы это или нет, но по какой-то причине суперфункции Apple, например: - (void) scrollViewDidScroll; называется супер, но не был перехвачен должным образом и пропустил этот вызов.

Когда я удалил «переопределенный» вызов, который был просто вызовом [super scrollView], он начал работать правильно.

Я не знаю, почему код Apple так нарушен (вызов super не имеет такого же эффекта, не переопределяя его), но убедитесь, что вы не подклассифицируете это: Функции ScrollView Функции MKMapView ... или, возможно, с помощью WildCard Gesture Recognizer, очень любезно предоставленного ответом на вопрос, почему представления карты не реагируют на touchesBegan / Moved и т. д. здесь: Как перехватить события касаний в объектах MKMapView или UIWebView? .

Если это не поможет, убедитесь, что у вас нет представления поверх других представлений, неправильные делегаты, xibs расположены и подключены, обычные вещи.

...