nie MKMapView wywoływanie metod delegata

głosy
10

W UIViewController dodaję MKMapView do widoku kontrolowany przez kontroler.

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

Później w kontrolerze mam

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

nigdy Sporządzono pobiera drukowane. Żaden z pozostałych metod delegata sprawdzony albo jak MapView: viewForAnnotation: Używam MKMapView w innej aplikacji, ale wydaje się to zdarzyć w każdej nowej aplikacji robię. Czy ktoś widział ten problem?

EDYTOWAĆ:

Problem wydaje się być, gdy UIViewController jest delegatem MKMapView, bezpośrednią podklasą NSObject wydaje się działać dobrze. I można obejść tak, nadal wydaje się bardzo dziwne, ponieważ robiłem to wcześniej.

Utwórz 04/09/2009 o 14:42
źródło użytkownik
W innych językach...                            


10 odpowiedzi

głosy
8

Miałem dokładnie ten sam problem: ja przypisany <MKMapViewDeledate> do mojego kontrolera, a związane z delegatem „właściciel pliku” w konstruktorze Interface, ale nadal moje wdrożone metody pełnomocnik nie zostali wezwani.

Powodem jest to, że od iOS 4, mapy są buforowane, a gdy aplikacja wyświetli mapę pamięci podręcznej potem metod, takich jak „mapViewDidFinishLoadingMap” nie są nazywane. Resetowanie „zawartość i ustawienia” w symulatorze wyczyszczenie pamięci podręcznej mapy, a zatem rozwiązuje problem.

Odpowiedział 15/01/2011 o 19:06
źródło użytkownik

głosy
6

Trochę stary, ale ponieważ iOS 7 jest nowa metoda, która może działać. rozwiązać mój problem

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Odpowiedział 14/06/2015 o 22:48
źródło użytkownik

głosy
4

Być może trzeba iść do IB i kontroli przeciągnij z MKMapView do widoku conroller, a następnie wybierz delegata, aby go delegatem ???

Odpowiedział 29/01/2010 o 00:59
źródło użytkownik

głosy
1

Miałem podobny problem z metodami MKMapViewDelegate nie miano. Mój problem został ustawiania MKCoordinateRegionMakeWithDistance i regionThatFits w -viewDidLoad kontrolera () Chciałem tylko pokazać obszar wokół mojego domu i nie zacząć od światopoglądu. Więc po dodaniu adnotacji w viewDidLoad sterownika, zacząłem czasomierza. Kiedy wygasa w ciągu jednej sekundy, powiększać regionie chcę z powyższych API i ognia metod delegata. To po prostu sprawia mi trochę w głowie i skłonni do wymiotów na moim iPadzie.

Teraz mam tylko do czynienia z cholernie niskie ostrzeżeń pamięci.

Odpowiedział 21/05/2010 o 16:38
źródło użytkownik

głosy
1

może dość oczywiste, ale po prostu sprawdzenie:

Czy zadbali swoją deklarację viewcontroller jest prawidłowo wykonane. Coś jak:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Odpowiedział 04/09/2009 o 16:02
źródło użytkownik

głosy
0

Moim problemem jest to, że mogę zapomnieć, aby ustawić lokalizację w symulatorze. Idź do Simulator -> Debug -> Location -> Custom location...i MKMapViewDelegatemetody rozpocznie nazywając

Odpowiedział 04/04/2017 o 09:19
źródło użytkownik

głosy
0

Miałem podobny problem w Xcode 6.1 budowania dla iOS 8.1, gdzie żadna z metod MKMapViewDelegate były nazwie. 2. W zgłoszeniu identyczny kod spowodowało metod MKMapViewDelegate miano, jak oczekiwano.

W ViewController.m delegat MapView została ustalona w następujący sposób:

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

W ViewController.h:

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

Miałem ręcznie dodane linię IBOutlet wyżej pliku nagłówka, ale tylko w aplikacji, gdzie nie były odbierane metody delegata.

Rozwiązaniem było wykreślenie IBOutlet miałem dodany ręcznie do nagłówka, a następnie udać się do ujęć oraz Ctrl-przeciągnięcie od MKMapView do bloku @interface w moim ViewController.h. Identyczny IBOutlet został odtworzony w pliku nagłówka, w wyniku czego wszystkie metody delegata były nazywane poprawnie.

Odpowiedział 01/03/2015 o 06:55
źródło użytkownik

głosy
0

Właśnie wpadłem na to ponownie na iOS 7 i zorientowali się, że coś działa konsekwentnie. Kwestia jesteśmy zazwyczaj walczą dzwoni setRegion przed regionu ma kontekstowego (zobacz wykonywania pracy). iOS 7 dodaje nowe metody delegata reprezentujących wszystkie płytki są renderowane, ale wstępnie iOS 7 buforowane płytek zapobiega delegata metoda mapViewDidFinishLoadingMap z której dzwonimy. Zamiast tego użyć zmiennej „pendingRegion”, aby sprawdzić, czy mam „w kolejce” do zmiany regionu, kiedy mapa jest renderowany, a następnie po prostu użyć metody viewDidAppear jako sygnał mapa nadano do ekranu, a więc region będzie miał kontekst ,

Dodać zmienną do nagłówka:

MKCoordinateRegion pendingRegion;

Dodaj tę metodę do kodu:

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

Dodaj to do swojej viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Odpowiedział 26/09/2013 o 16:26
źródło użytkownik

głosy
-1

Dla mnie to działało po dodaniu NSLocationWhenInUseUsageDescriptionciąg w Info.plist

Odpowiedział 03/05/2015 o 12:12
źródło użytkownik

głosy
-2

Poznałem również sam problem jak ty. I stwierdził, że: z iPhone SDK 3.2 - gdy tworzę nową UIViewController ze skojarzonym pliku XIB (opcja wyboru w UIViewController tworząc dialogowego), metody delegat MKMapViewDelegate nigdy nie są nazywane.

Jednak, kiedy należy wykonać poniższe kroki, to działa dobrze.

  1. Utwórz nową klasę UIViewController (nigdy zaznaczyć opcję: utworzyć plik XIB związanego z kontrolerem)

  2. Utwórz nowy plik XIb. Dodaj mapę za pomocą interfejsu Builder + ustawienie klasę właściciela z klasą na etapie 1 + ustawienie delegata przedmiotu punktu na mapie do klasy właściciela.

  3. Wdrożenie metod Delegat klasy UIViewController w kroku 1.

  4. Kiedy chcę używać mojego ViewController (z dodatkiem mapie), załadować go z nib nazwie jak poniżej:

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

Kod działa OK. Nie wiem, jakie zmiany Jabłko czy też z pliku XIB gdy tworzę UIViewController za pomocą kreatora, ale może przyczyną mojego problemu. To zajmuje mi 1 dzień, aby znaleźć to głupie rozwiązanie.

Jeśli znalazłeś inny, proszę podzielić się ze mną.

Dzięki

Odpowiedział 02/05/2010 o 11:09
źródło użytkownik

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