MKMapView ikke kalle delegat metoder

stemmer
10

I en UIViewController legger jeg en MKMapView til visningen styres av styringen.

- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 460, 320);
map = [[MKMapView alloc] initWithFrame:rect];
map.delegate = self;
[self.view addSubview:map];
 }

Senere i kontrolleren jeg har

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
     NSLog(@done.);
}

Ferdig aldri blir skrevet ut. Ingen av de andre delegere metoder blir kalt enten liker mapView: viewForAnnotation: Jeg bruker en MKMapView i en annen app, men dette ser ut til å skje på en ny søknad jeg gjør. Har noen andre sett dette problemet?

REDIGERE:

Problemet ser ut til å være når UIViewController er laget representanten av MKMapView, en direkte underklasse av NSObject synes å fungere greit. Jeg kan omgå som dette, likevel virker veldig rart siden jeg har gjort det før.

Publisert på 04/09/2009 klokken 13:42
kilden bruker
På andre språk...                            


10 svar

stemmer
8

Jeg hadde nøyaktig samme problem: Jeg hadde tildelt <MKMapViewDeledate> til min kontrolleren, og knyttet representanten til "File eier" i Interface Builder, men fortsatt mine implementert delegere metoder ikke ble kalt.

Grunnen er at siden iOS 4 er kart bufret, og når en app viser en bufret kartet da metoder som "mapViewDidFinishLoadingMap" ikke kalles. Nullstille "innhold og innstillinger" i simulatoren fjerner bufrede kart og derfor løser problemet.

Svarte 15/01/2011 kl. 18:06
kilden bruker

stemmer
6

Litt gammel, men siden iOS 7 er det en ny metode som kan fungere. løste problemet mitt

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Svarte 14/06/2015 kl. 22:48
kilden bruker

stemmer
4

Kanskje du trenger å gå til IB og kontroll-dra fra MKMapView til visningen conroller, velg delegat for å gjøre det en delegat ???

Svarte 28/01/2010 kl. 23:59
kilden bruker

stemmer
1

Jeg hadde et lignende problem med metoder for MKMapViewDelegate ikke blir kalt. Problemet mitt var å sette den MKCoordinateRegionMakeWithDistance og regionThatFits i kontrollerens -viewDidLoad () Jeg ville bare vise regionen rundt huset mitt og ikke starte med verdensbilde. Så etter å legge kommentarer i kontrollerens viewDidLoad, begynte jeg et tidsur. Når den utløper i ett sekund, jeg zoome inn på området jeg vil med over APIer og representanten metoder brannen. Det gjør bare meg litt svimmel og tilbøyelig til å kaste opp på min iPad.

Nå er jeg bare nødt til å forholde seg til darn lite minne advarsler.

Svarte 21/05/2010 kl. 15:38
kilden bruker

stemmer
1

kanskje ganske opplagt, men bare sjekke:

Har du sørget for din viewcontroller Erklæringen er riktig gjort. Noe som:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Svarte 04/09/2009 kl. 15:02
kilden bruker

stemmer
0

Mitt problem er at jeg glemmer å sette stedet i simulatoren. Gå til Simulator -> Debug -> Location -> Custom location...og MKMapViewDelegatemetodene vil begynne å ringe

Svarte 04/04/2017 kl. 09:19
kilden bruker

stemmer
0

Jeg hadde et lignende problem i XCode 6.1 bygger for iOS 8.1 der ingen av MKMapViewDelegate metoder ble kalt. I en andre anvendelse av identiske kode resulterte i MKMapViewDelegate metoder som kalles som forventet.

I ViewController.m den mapView delegat ble som følger:

- (void)viewDidLoad {
    ...
    self.mapView.delegate = self;

I ViewController.h:

@interface myMapViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@end

Jeg hadde manuelt lagt IBOutlet linje over til overskriften filen, men bare i appen der representanten metoder ikke ble mottatt.

Løsningen ble å slette IBOutlet linjen jeg hadde lagt til manuelt til overskriften, og deretter gå til storyboard og CTRL-dra fra MKMapView til @interface blokk i min ViewController.h. Den identisk IBOutlet ble gjenskapt i topptekstfilen med det resultat at alle representanten metoder ble kalt på riktig måte.

Svarte 01/03/2015 kl. 06:55
kilden bruker

stemmer
0

Jeg kjørte inn i denne igjen på iOS 7 og funnet ut noe som fungerer konsekvent. Spørsmålet vi vanligvis kjemper ringer setRegion før regionen har sammenheng (vis gjengitt). iOS 7 legger til nye delegere metoder som representerer alle brikkene blir gjort, men pre-iOS 7 bufrede fliser hindrer representanten metoden mapViewDidFinishLoadingMap fra å bli kalt. I stedet bruker jeg en "pendingRegion" variable for å sjekke om jeg har "kø" en region endring for når kartet er gjengitt og så bare bruke viewDidAppear metoden som et signal kartet har blitt gjengitt på skjermen og dermed en region vil ha sammenheng .

Legg til en variabel til header:

MKCoordinateRegion pendingRegion;

Legg denne metoden til koden:

-(void)initPendingRegion {
    pendingRegion.center = CLLocationCoordinate2DMake(0.0, 0.0);
}

Legg dette til din viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Svarte 26/09/2013 kl. 15:26
kilden bruker

stemmer
-1

For meg virket det etter å ha lagt NSLocationWhenInUseUsageDescriptionstreng i Info.plist

Svarte 03/05/2015 kl. 12:12
kilden bruker

stemmer
-2

Jeg har også møtt samme problemet som deg. Jeg fant ut at: med iPhone SDK 3.2 - når jeg oppretter en ny UIViewController med en tilhørende xib fil (avmerkingsboksen alternativ i UIViewController skape dialog), er delegat metoder for MKMapViewDelegate aldri kalt.

Men når jeg følger nedenfor trinn, går det bra.

  1. Opprett en ny UIViewController klasse (aldri sjekke alternativet: å skape xib fil forbundet med kontrolleren)

  2. Opprett en ny xib fil. Legg kartet ved hjelp Interface Builder + sette eieren klasse med klassen på trinn 1 + sette delegat objekt av kartet punkt til eieren klassen.

  3. Implementere delegaten metoder for UIViewController klasse i trinn 1.

  4. Når jeg ønsker å bruke min ViewController (med ekstra kartet), jeg legger det med blyet navn som under eksempel:

    MapPreviewController* mapPreviewController = [[MapPreviewController alloc] 
        initWithNibName:@"MapPreviewController" bundle:[NSBundle mainBundle]];
    
    [self.centerPanelView addSubview:mapPreviewController.view];
    

Koden kjører ok. Jeg vet ikke hva Apple endringer eller gjorde med xib filen når jeg lage min UIViewController hjelp av veiviseren, men det kan roten årsaken til problemet mitt. Det tar meg en dag for å finne denne dumme løsningen.

Hvis du har funnet en annen, kan du dele med meg.

Takk

Svarte 02/05/2010 kl. 10:09
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more