Nu MKMapView metode de asteptare delega

voturi
10

Într-un UIViewController am adăuga un MKMapView la vizualizarea controlată de către operator.

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

Mai târziu, în controlerul am

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

Efectuat nu se imprimă. Nici una dintre celelalte metode delegatului apelate, fie ca mapView: viewForAnnotation: Eu folosesc un MKMapView într-o altă aplicație, dar acest lucru pare să se întâmple cu privire la orice aplicație nouă am face. Oricine altcineva a văzut acest comportament?

EDITAȚI | ×:

Problema pare a fi atunci când se face UIViewController delegatul MKMapView, o subclasă directă a NSObject pare să funcționeze bine. Eu pot lucra în jurul valorii de acest fel, încă pare foarte ciudat, deoarece am făcut-o înainte.

Întrebat 04/09/2009 la 14:42
sursa de către utilizator
În alte limbi...                            


10 răspunsuri

voturi
8

Am avut exact aceeași problemă: am atribuit <MKMapViewDeledate> la controlerul meu și legat delegatul de „proprietar File“ în Interface Builder, dar încă metodele mele delegatului puse în aplicare nu au fost numite.

Motivul este că, din moment ce iOS 4, hărți sunt memorate în cache, și de fiecare dată când o aplicație afișează o hartă în cache, apoi metode, cum ar fi „mapViewDidFinishLoadingMap“ nu sunt numite. Resetarea „conținutul și setările“ în simulator șterge hărțile stocate în memoria cache și, prin urmare, rezolvă problema.

Publicat 15/01/2011 la 19:06
sursa de către utilizator

voturi
6

Un pic vechi, dar din moment ce iOS 7 există o nouă metodă care ar putea să funcționeze. rezolvat problema mea

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Publicat 14/06/2015 la 22:48
sursa de către utilizator

voturi
4

Poate că aveți nevoie pentru a merge la IB și de control trageți din MKMapView la vedere conroller, apoi selectați delegat pentru un delegat face ???

Publicat 29/01/2010 la 00:59
sursa de către utilizator

voturi
1

Am avut o problemă similară cu metodele de MKMapViewDelegate nu sunt numite. Problema mea a fost stabilirea MKCoordinateRegionMakeWithDistance și regionThatFits în -viewDidLoad controlerului () am vrut să arăt doar regiunea din jurul casei mele și nu începe cu viziunea lumii. Deci, după adăugarea adnotări în viewDidLoad controller, am început un cronometru. Atunci când acesta expiră într-o secundă, am mări regiune Vreau cu API-urile de mai sus și focul metode delegatului. Doar mă face un pic amețit și înclinat să vomite pe iPad meu.

Acum am doar pentru a face față cu darn avertismente de memorie mici.

Publicat 21/05/2010 la 16:38
sursa de către utilizator

voturi
1

poate destul de evident, dar doar de verificare:

V-ați asigurat că declarația dumneavoastră viewcontroller se face corect. Ceva asemănător cu:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Publicat 04/09/2009 la 16:02
sursa de către utilizator

voturi
0

Problema mea este că am uitat pentru a seta locația în simulator. Du - te Simulator -> Debug -> Location -> Custom location...și MKMapViewDelegatemetodele vor începe de asteptare

Publicat 04/04/2017 la 09:19
sursa de către utilizator

voturi
0

Am avut o problemă similară în XCode 6.1 pentru iOS 8.1 clădire în cazul în care nici una dintre metodele MKMapViewDelegate erau numite. Într-o aplicație a 2-cod identic avut ca rezultat metodele MKMapViewDelegate fiind numit cum era de așteptat.

In ViewController.m delegatul mapView a fost stabilit după cum urmează:

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

În ViewController.h:

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

Am adăugat manual linia IBOutlet de mai sus pentru fișierul antet, dar numai în aplicația în care nu au fost primite metodele delegatului.

Soluția a fost de a șterge linia IBOutlet am adăugat manual la antet, și apoi du-te la storyboard și CTRL-trageți de la MKMapView la blocul @interface în ViewController.h mea. Identic IBOutlet a fost recreat în fișierul antet cu rezultatul că toate metodele delegatului au fost numite în mod corect.

Publicat 01/03/2015 la 06:55
sursa de către utilizator

voturi
0

Tocmai am fugit în această din nou pe iOS 7 și a dat seama ceva care funcționează în mod constant. Problema suntem de obicei, lupta este de asteptare setRegion înainte ca regiunea are context (vizualizare prestate). iOS 7 adaugă noi metode de delegatul reprezentând toate piesele fiind redate, dar pre-iOS 7 gresie stocate în memoria cache împiedică delegat metoda mapViewDidFinishLoadingMap de a fi numit. În schimb am folosi o variabilă „pendingRegion“ pentru a verifica dacă am „coada de așteptare“, o schimbare de regiune atunci când harta este redat și apoi pur și simplu utilizați metoda viewDidAppear ca un semnal pe hartă a fost redat pe ecran și, prin urmare, o regiune va avea context .

Adăugați o variabilă la antet:

MKCoordinateRegion pendingRegion;

Adăugați această metodă pentru codul:

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

Adăugați acest la viewDidAppear dumneavoastră:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Publicat 26/09/2013 la 16:26
sursa de către utilizator

voturi
-1

Pentru mine, ea a lucrat după adăugarea NSLocationWhenInUseUsageDescriptionșir în Info.plist

Publicat 03/05/2015 la 12:12
sursa de către utilizator

voturi
-2

M-am întâlnit, de asemenea, aceeași problemă ca a ta. Am constatat că: cu iPhone SDK-ul 3.2 - atunci când am crea un nou UIViewController cu un fișier XIb asociat (opțiunea din caseta de dialog crearea UIViewController), metodele Delegatul MKMapViewDelegate nu sunt numite.

Cu toate acestea, atunci când am urmați pașii de mai jos, se execută bine.

  1. Creați o nouă clasă UIViewController (nu bifați opțiunea: creați fișierul XIb asociat cu controlerul)

  2. Creați un nou fișier XIb. Adăugați harta utilizând Interface Builder setarea + clasa proprietar cu clasa la pasul 1 setarea + obiect delegat al punctului de hartă a clasei proprietarului.

  3. Implementarea metodelor delegat pentru clasa UIViewController în pasul 1.

  4. Când vreau să folosesc ViewController meu (cu harta adăugată), am încărcat-o cu numele penița ca exemplul de mai jos:

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

Codul ruleaza ok. Nu știu ce modificări Apple sau făcut cu fișierul XIb când am crea UIViewController meu folosind expertul, dar poate cauza rădăcină de problema mea. Îmi ia o zi pentru a găsi această soluție prost.

Dacă ați găsit încă unul, vă rugăm să împartă cu mine.

Mulțumiri

Publicat 02/05/2010 la 11:09
sursa de către utilizator

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