MKMapView není volání metody delegáta

hlasů
10

V UIViewController přidám MKMapView k názoru, řízen regulátorem.

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

Později v regulátoru mám

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

Dáno nikdy se vytiskne. Žádná z dalších metod delegáta zavolá buď jako MapView: viewForAnnotation: Používám MKMapView v jiné aplikaci, ale zdá se, že se stalo na jakékoli nové žádosti udělám. Má někdo vidět toto chování?

UPRAVIT:

Problém se zdá být, když UIViewController je vyrobena delegáta z MKMapView, přímá podtřída NSObject zdá se, pracuje v pořádku. Mohu obejít takhle, stále se zdá být velmi podivné, protože jsem to udělal předtím.

Položena 04/09/2009 v 14:42
zdroj uživatelem
V jiných jazycích...                            


10 odpovědí

hlasů
8

Měl jsem přesně stejný problém: jsem přidělen <MKMapViewDeledate> mé ovladači a spojil delegát „majitel File“ v Interface Builder, ale stále mám zavedené metody delegáta nebyla volána.

Důvodem je, že od iOS 4, mapy jsou uložené, a vždy, když je aplikace zobrazí mezipaměti mapy pak metody, jako je „mapViewDidFinishLoadingMap“ nejsou nazývá. Resetování „obsah a nastavení“ na simulátoru vymaže cache map, a proto řeší problém.

Odpovězeno 15/01/2011 v 19:06
zdroj uživatelem

hlasů
6

Trochu starý, ale protože iOS 7 je nová metoda, která by mohla fungovat. vyřešit můj problém

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Odpovězeno 14/06/2015 v 22:48
zdroj uživatelem

hlasů
4

Možná budete muset jít do IB a kontrolní-táhnout z MKMapView k názoru conroller, vyberte delegáta, aby byl delegát ???

Odpovězeno 29/01/2010 v 00:59
zdroj uživatelem

hlasů
1

Měl jsem podobný problém s metodami MKMapViewDelegate není volána. Můj problém byl nastavení MKCoordinateRegionMakeWithDistance a regionThatFits v -viewDidLoad regulátoru () Chtěl jsem ukázat jen oblast kolem mého domu a nezačne s pohled na svět. Takže po přidání anotace viewDidLoad regulátoru, jsem začal časovač. Když to skončí v jedné sekundě, jsem přiblížit na region chci s výše uvedenými API a metody delegáta ohně. Prostě mě trochu závratě a sklon k zvracet na svém iPadu.

Teď mám jen vypořádat s zašít signalizace nedostatku paměti.

Odpovězeno 21/05/2010 v 16:38
zdroj uživatelem

hlasů
1

Možná zcela zřejmé, ale jen kontrolu:

Už jste se, že vaše prohlášení viewcontroller je správně provedeno. Něco jako:

@interface YourViewController : UIViewController <MKMapViewDelegate>
Odpovězeno 04/09/2009 v 16:02
zdroj uživatelem

hlasů
0

Můj problém je, že jsem zapomněl nastavit polohu v simulátoru. Přejít na Simulator -> Debug -> Location -> Custom location...a MKMapViewDelegatemetody začnou volat

Odpovězeno 04/04/2017 v 09:19
zdroj uživatelem

hlasů
0

Měl jsem podobný problém v XCode 6,1 stavba pro iOS 8.1, kde žádná z metod MKMapViewDelegate byla volána. Ve 2. přihlášky shodný kód vyústil ve způsobech MKMapViewDelegate volána podle očekávání.

V ViewController.m byl MapView delegát je stanovena následovně:

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

V ViewController.h:

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

Jsem ručně přidal linku IBOutlet výše na záhlaví souboru, ale pouze v aplikaci, kde nebyli přijaté metody delegáta.

Řešením bylo odstranit řádek IBOutlet jsem ručně přidán do hlavičky, a pak jít do scénáře a Ctrl-táhnout od MKMapView do @interface bloku v mém ViewController.h. Identický IBOutlet byl obnoven v záhlaví souboru s tím výsledkem, že všechny metody delegáta byli povoláni správně.

Odpovězeno 01/03/2015 v 06:55
zdroj uživatelem

hlasů
0

Jen jsem narazil na to opět na iOS 7 a zjistil něco, co funguje konzistentně. Problematika my obvykle bojují volá setRegion před regionu má kontextové (výhled tavené). IOS 7 přidává nové delegáta způsoby, které představují všechny dlaždice je vykreslen ale předem IOS 7 mezipaměti dlaždice zabraňuje delegáta metody mapViewDidFinishLoadingMap z volána. Místo toho jsem použít „pendingRegion“ proměnné zjistit, jestli mám „frontě“ změnu regionu pro případ, kdy je vykreslen mapy a pak jednoduše použít metodu viewDidAppear jako signál mapa byla poskytnuta na obrazovce a tedy region bude mít kontext ,

Přidat proměnnou záhlaví:

MKCoordinateRegion pendingRegion;

Přidat tuto metodu kódu:

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

Přidat na svou viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
Odpovězeno 26/09/2013 v 16:26
zdroj uživatelem

hlasů
-1

Pro mě to fungovalo po přidání NSLocationWhenInUseUsageDescriptionřetězec Info.plist

Odpovězeno 03/05/2015 v 12:12
zdroj uživatelem

hlasů
-2

Také jsem potkal stejný problém jako vy. Zjistil jsem, že: s iPhone SDK 3.2 - když jsem vytvořit nový UIViewController s přidruženým souborem XIb (volba políčko v dialogovém okně vytvoření UIViewController), delegátské metody MKMapViewDelegate se nikdy nevolal.

Nicméně, když jsem postupujte podle následujících kroků, to běží dobře.

  1. Vytvořte novou třídu UIViewController (nikdy zaškrtněte volbu: vytvořit XIb soubor spojený s regulátorem)

  2. Vytvořte nový soubor XIb. Přidejte mapy pomocí Interface Builder + nastavení třídu Vlastník se třídou na stupni 1 + nastavení delegáta předmět bodu na mapě do třídy vlastníka.

  3. Provádět delegátů metody pro třídu UIViewController v kroku 1.

  4. Když chci používat svůj ViewController (s přidanou mapě), I vložte jej nib názvem jako příklad níže:

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

Kód běží v pořádku. Nevím, jaké změny Apple nebo udělal s souboru XIb, když si vytvořím svůj UIViewController pomocí průvodce, ale to může být příčinou mého problému. Chvíli mi trvá 1 den najít tento stupidní řešení.

Pokud jste si našli ještě jednu, prosím podělte se se mnou.

dík

Odpovězeno 02/05/2010 v 11:09
zdroj uživatelem

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