MKMapView niet bellen afgevaardigde methoden

stemmen
10

In een UIViewController voeg ik MKMapView het uitzicht geregeld door de regelaar.

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

Later in de controller heb ik

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

Gedaan nooit wordt afgedrukt. Geen van de andere afgevaardigde methoden gecalled hetzij als mapView: viewForAnnotation: ik MKMapView gebruiken in een andere app, maar dit lijkt te gebeuren op een nieuwe toepassing die ik maak. Heeft iemand anders gezien dit gedrag?

BEWERK:

Het probleem lijkt te zijn wanneer UIViewController wordt de afgevaardigde van de MKMapView gemaakt, een directe subklasse van NSObject in orde lijkt te werken. Ik kan werken rond als dit, lijkt nog steeds erg vreemd aangezien ik het al eerder heb gedaan.

De vraag is gesteld op 04/09/2009 om 14:42
bron van user
In andere talen...                            


10 antwoorden

stemmen
8

Ik had precies hetzelfde probleem: ik had op mijn controller toegewezen <MKMapViewDeledate>, en gekoppeld aan de afgevaardigde in het "File eigenaar" in Interface Builder, maar nog steeds mijn geïmplementeerd delegeren methoden werden niet genoemd.

De reden hiervoor is dat sinds iOS 4, kaarten zijn in de cache, en wanneer een app cache een kaart weer te geven dan methoden zoals "mapViewDidFinishLoadingMap" niet genoemd. Nul "inhoud en instellingen" in de simulator wist de gecachte kaarten en lost dus het probleem.

antwoordde op 15/01/2011 om 19:06
bron van user

stemmen
6

Een beetje oud, maar aangezien iOS 7 is er een nieuwe methode die zou kunnen werken. mijn probleem opgelost

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
antwoordde op 14/06/2015 om 22:48
bron van user

stemmen
4

Misschien moet je bij de IB en de controle-sleep vanuit de MKMapView om de weergave conroller, selecteer vervolgens afgevaardigde om het een afgevaardigde te maken ???

antwoordde op 29/01/2010 om 00:59
bron van user

stemmen
1

Ik had een soortgelijk probleem met de methodes van MKMapViewDelegate niet wordt genoemd. Mijn probleem is het instellen van de MKCoordinateRegionMakeWithDistance en regionThatFits in -viewDidLoad van de controller () Ik wilde alleen de regio te laten zien rond mijn huis en niet beginnen met het wereldbeeld. Dus na het toevoegen van annotaties in viewDidLoad van de controller, ben ik begonnen met een timer. Wanneer het verloopt in een seconde, ik inzoomen op de regio wil ik met de bovenstaande API's en de gemachtigde methoden vuur. Het maakt me een beetje duizelig en geneigd tot braken op mijn iPad.

Nu heb ik alleen maar te maken met de darn weinig geheugen waarschuwingen.

antwoordde op 21/05/2010 om 16:38
bron van user

stemmen
1

misschien vrij duidelijk, maar een controle van:

Hebt u zorgde ervoor dat uw ViewController aangifte wordt correct gedaan. Zoiets als:

@interface YourViewController : UIViewController <MKMapViewDelegate>
antwoordde op 04/09/2009 om 16:02
bron van user

stemmen
0

Mijn probleem is dat ik vergeet om locatie in te stellen in de simulator. Ga naar Simulator -> Debug -> Location -> Custom location...en de MKMapViewDelegatemethoden zal beginnen bellen

antwoordde op 04/04/2017 om 09:19
bron van user

stemmen
0

Ik had een soortgelijk probleem in XCode 6.1 bouwt voor iOS 8.1, waar geen van de MKMapViewDelegate methoden werden genoemd. In een 2 applicatie de identieke code resulteerde in de MKMapViewDelegate werkwijzen worden genoemd als verwacht.

In ViewController.m werd de Mapview afgevaardigde als volgt vastgesteld:

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

In ViewController.h:

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

Ik had handmatig toegevoegde de IBOutlet lijn boven aan de header bestand, maar alleen in de app waar de afgevaardigde methoden werden niet ontvangen.

De oplossing was om de IBOutlet lijn die ik had met de hand aan de header toegevoegd ook weer verwijderen, en ga dan naar het storyboard en CTRL-drag van de MKMapView naar de @interface blok in mijn ViewController.h. De identieke IBOutlet werd herschapen in de header-bestand met als gevolg dat alle delegeren methoden correct werden genoemd.

antwoordde op 01/03/2015 om 06:55
bron van user

stemmen
0

Ik liep in dit opnieuw op iOS 7 en bedacht iets dat consequent werkt. Het probleem dat we doorgaans vechten belt setRegion voor de regio heeft context (view gerenderd). iOS 7 voegt nieuwe afgevaardigde methoden die alle tegels worden teruggegeven, maar pre-iOS 7 in de cache tegels voorkomt dat de afgevaardigde methode mapViewDidFinishLoadingMap van wordt genoemd. Vervanging ik gebruik een "pendingRegion" variabel te controleren of ik "wachtrij" een regio veranderen wanneer de kaart wordt weergegeven en vervolgens eenvoudigweg de viewDidAppear werkwijze signaal plan is gemaakt om het scherm en dus een regio context .

Voeg een variabele aan uw header:

MKCoordinateRegion pendingRegion;

Voeg deze methode om uw code:

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

Voeg dit toe aan uw viewDidAppear:

if(pendingRegion.center.latitude != 0.0) {
        MKCoordinateRegion useRegion = pendingRegion;
        [self initPendingRegion];
        [self.mapView setRegion:useRegion animated:YES];
}
antwoordde op 26/09/2013 om 16:26
bron van user

stemmen
-1

Voor mij, het werkte na het toevoegen van NSLocationWhenInUseUsageDescriptiontekenreeks in Info.plist

antwoordde op 03/05/2015 om 12:12
bron van user

stemmen
-2

Ik ontmoette ook hetzelfde probleem als de jouwe. Ik vond dat: met de iPhone SDK 3.2 - wanneer ik een nieuwe UIViewController maken met een bijbehorend xib bestand (het selectievakje optie in UIViewController creëren van dialoog), zijn afgevaardigde methoden van MKMapViewDelegate nooit gebeld.

Echter, toen ik volg onderstaande stappen, het loopt goed.

  1. Maak een nieuwe UIViewController klasse (nog nooit de optie: maak xib bestand dat is gekoppeld met de controller)

  2. Maak een nieuw xib bestand. Voeg de kaart met behulp van Interface Builder + instellen van de eigenaar klasse met de klas op stap 1 + instellen van gedelegeerde object van de kaart punt aan de eigenaar klasse.

  3. Implementeer afgevaardigde methoden voor de klasse UIViewController in stap 1.

  4. Als ik wil mijn ViewController gebruiken (met de toegevoegde kaart), ik laden met de penpunt naam als voorbeeld hieronder:

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

De code wordt uitgevoerd ok. Ik weet niet wat Apple verandert of deed met de xib bestand wanneer ik mijn UIViewController maken met behulp van de wizard, maar het kan de oorzaak van mijn probleem. Het kost me 1 dag tot deze domme oplossing te vinden.

Als u een ander gevonden, neem dan deel aan mij.

Bedankt

antwoordde op 02/05/2010 om 11:09
bron van user

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