Non MKMapView chiamando metodi delegato

voti
10

In un UIViewController aggiungo un MKMapView alla vista controllato dal controllore.

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

Più tardi nel controller che ho

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

Fatto non viene mai stampato. Nessuno degli altri metodi delegato ottenere chiamato sia come MapView: viewForAnnotation: Io uso un MKMapView in un altro app, ma questo sembra accadere su qualsiasi nuova applicazione che faccio. Qualcun altro ha visto questo comportamento?

MODIFICARE:

Il problema sembra essere quando UIViewController è fatto il delegato del MKMapView, una sottoclasse diretta di NSObject sembra funzionare bene. Posso lavorare in giro così, sembra ancora molto strano dato che ho fatto prima.

È pubblicato 04/09/2009 alle 14:42
fonte dall'utente
In altre lingue...                            


10 risposte

voti
8

Ho avuto lo stesso identico problema: avevo assegnato <MKMapViewDeledate> al mio controller, e legato il delegato al "proprietario del file" in Interface Builder, ma ancora i miei metodi delegato implementati non sono stati chiamati.

La ragione è che dal momento che iOS 4, le mappe vengono memorizzate nella cache, e ogni volta che visualizzare un app una mappa memorizzata nella cache quindi metodi come "mapViewDidFinishLoadingMap" non sono chiamati. Reset "contenuto e impostazioni" nel simulatore cancella le mappe memorizzate nella cache e risolve quindi il problema.

Risposto il 15/01/2011 a 19:06
fonte dall'utente

voti
6

Un po 'vecchio, ma dal momento che iOS 7 v'è un nuovo metodo che potrebbe funzionare. risolto il mio problema

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Risposto il 14/06/2015 a 22:48
fonte dall'utente

voti
4

Forse avete bisogno di andare al IB e di controllo trascinare dalla MKMapView al conroller vista, quindi selezionare delegato per renderlo un delegato ???

Risposto il 29/01/2010 a 00:59
fonte dall'utente

voti
1

Ho avuto un problema simile con i metodi di MKMapViewDelegate non essere chiamato. Il mio problema stava tramontando l'MKCoordinateRegionMakeWithDistance e regionThatFits nel -viewDidLoad del controller () ho voluto mostrare solo la regione intorno a casa mia e non iniziare con la visione del mondo. Così, dopo l'aggiunta di annotazioni nella viewDidLoad del controller, ho iniziato un timer. Quando si scade in un secondo, ingrandire una regione che voglio con le API di cui sopra e il fuoco metodi delegato. Semplicemente mi fa un po 'la testa e incline a vomitare sul mio iPad.

Ora devo solo a che fare con le basse darn avvisi di memoria.

Risposto il 21/05/2010 a 16:38
fonte dall'utente

voti
1

forse abbastanza ovvio, ma solo il controllo:

Hai fatto in modo che la vostra dichiarazione viewcontroller è fatto correttamente. Qualcosa di simile a:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Risposto il 04/09/2009 a 16:02
fonte dall'utente

voti
0

Il mio problema è che ho dimenticato di impostare la posizione nel simulatore. Vai alla Simulator -> Debug -> Location -> Custom location...ei MKMapViewDelegatemetodi saranno iniziare a chiamare

Risposto il 04/04/2017 a 09:19
fonte dall'utente

voti
0

Ho avuto un problema simile in XCode 6.1 costruire per iOS 8.1 in cui nessuno dei metodi MKMapViewDelegate venivano chiamati. In un secondo applicazione del codice identico portato ai metodi MKMapViewDelegate essere chiamato come previsto.

Nel ViewController.m il delegato MapView è stato fissato come segue:

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

In ViewController.h:

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

Avevo aggiunto manualmente la linea IBOutlet sopra al file di intestazione, ma solo in app in cui non venivano ricevuti i metodi delegato.

La soluzione era quella di cancellare la linea IBOutlet avevo aggiunto manualmente per l'intestazione, e poi andare al storyboard e CTRL-trascinare dalla MKMapView al blocco @interface nel mio ViewController.h. La identico IBOutlet stato ricreato nel file di intestazione con il risultato che tutti i metodi delegato stati chiamati correttamente.

Risposto il 01/03/2015 a 06:55
fonte dall'utente

voti
0

Ho appena incontrato di nuovo su iOS 7 e capito qualcosa che funziona in modo coerente. Il problema che stiamo combattendo in genere sta chiamando setregion prima che la regione ha contesto (vista renderizzata). iOS 7 aggiunge nuovi metodi delegato che rappresentano tutte le piastrelle sono stati resi ma pre-IOS 7 piastrelle cache impedisce il metodo delegato mapViewDidFinishLoadingMap dall'essere chiamato. Invece io uso una variabile "pendingRegion" per verificare se ho "coda" un cambiamento regione per quando la mappa viene resa e poi semplicemente utilizzare il metodo viewDidAppear come segnale la mappa è stata resa allo schermo e quindi una regione avrà contesto .

Aggiungere una variabile per l'intestazione:

MKCoordinateRegion pendingRegion;

Aggiungere questo metodo per il tuo codice:

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

Aggiungi questo al vostro viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Risposto il 26/09/2013 a 16:26
fonte dall'utente

voti
-1

Per me, ha funzionato dopo l'aggiunta di NSLocationWhenInUseUsageDescriptionstringa nel Info.plist

Risposto il 03/05/2015 a 12:12
fonte dall'utente

voti
-2

Ho anche incontrato lo stesso problema come la tua. Ho scoperto che: con l'iPhone SDK 3.2 - quando creo un nuovo UIViewController con un file XI ter associato (l'opzione casella di controllo nella finestra di dialogo creazione UIViewController), metodi delegato di MKMapViewDelegate non vengono mai chiamati.

Tuttavia, quando ho seguire la procedura, funziona bene.

  1. Creare una nuova classe UIViewController (mai selezionare l'opzione: creare il file XI ter associato con il controller)

  2. Creare un nuovo file XI ter. Aggiungere la mappa usando Interface Builder + impostazione classe di appartenenza con la classe in fase 1 + impostazione oggetto delegato del punto mappa per classe di appartenenza.

  3. Implementare metodi delegato per la classe UIViewController al punto 1.

  4. Quando voglio usare la mia ViewController (con la mappa aggiunto), che carico con il nome pennino come di seguito Esempio:

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

Il codice viene eseguito ok. Non so quali cambiamenti ha fatto Apple o con il file XIb quando creo la mia UIViewController utilizzando la procedura guidata, ma può la causa principale del mio problema. Mi ci vuole 1 giorno per trovare questa soluzione stupida.

Se hai trovato un altro, si prega di condividere con me.

Grazie

Risposto il 02/05/2010 a 11:09
fonte dall'utente

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