MKMapView solo la visualizzazione di un singolo Annotazione dopo n iterazioni
-
18-09-2019 - |
Domanda
Io uso il loop di seguito per popolare il mio MapView.Tuttavia si mostra sempre solo un pin alla volta, non importa quante iterazioni faccio.
Individualmente dichiarazione di elementi non sembrano avere un impatto.
Sto usando l'iniziale 3.0 SDK con xCode 3.1.3 su osx 10.5.8, Il SDK 3.1 changelog non fanno alcuna menzione di eventuali correzioni al MKMapKit framework, quindi non ho sentito il bisogno di scaricare il 2,5 GB di file.
for(NSDictionary* dict in results ){
NSLog(@"Made Annotation %@ at N%f E%f", [dict valueForKey:@"location"],[dict valueForKey:@"latitude"],[dict valueForKey:@"longitude"] );
NSLog(@"List of keys %@", dict);
LTAnnotation* pin = [[LTAnnotation alloc] initWithTitle: [dict valueForKey:@"location"]
latitude: [dict objectForKey:@"latitude"]
longitude: [dict objectForKey:@"longitude"]
];
[MapView addAnnotation: pin];
}
Questa è uscita dalla prima istruzione di registrazione
Made Annotation London at N51.3 E0.07000000000000001
Made Annotation Amsterdam at N52.22 E4.53
E la seconda è la struttura del dizionario
List of keys {
id = 0;
latitude = 51.3;
location = London;
longitude = 0.07000000000000001;
time = "12:00-13:00";
}
List of keys {
id = 1;
latitude = 52.22;
location = Amsterdam;
longitude = 4.53;
time = "12:00-13:00";
}
Nel caso In cui siete interessati, ecco la mia implementazione di LTAnnotation
@interface LTAnnotation(Private)
double longitude;
double latitude;
@end
@implementation LTAnnotation
@synthesize title;
@synthesize subTitle;
-(id) initWithTitle:(NSString*)pTitle latitude:(NSNumber*)latDbl longitude:(NSNumber*) longDbl{
self = [super init];
self.title = pTitle;
latitude = [latDbl doubleValue];
longitude = [longDbl doubleValue];
NSLog(@"Create Annotation for %@ at %fN %fE",pTitle,[latDbl doubleValue],[longDbl doubleValue]);
return self;
}
-(CLLocationCoordinate2D) coordinate
{
CLLocationCoordinate2D retVal;
retVal.latitude = latitude;
retVal.longitude = longitude;
return retVal;
}
@end
Tutto questo si combina per produrre questo ...
il testo alt http://img340.imageshack.us/img340/3788/picture1fg.png
Qualsiasi idea di dove sto andando di male?Grazie
Soluzione
Due piccole cose che ho notato, che potrebbe aiutare a risolvere il problema:
- Non rilasciare il pin nel primo esempio di codice che creerebbe una perdita di
- Non si verifica se il "self = [super init];" nel tuo secondo esempio di codice è stato di successo ("if(self = [super init]){...} return self").Il NSLog anche solo uscite i parametri passati al metodo init, non i metodi di istanza dell'oggetto
E, cosa più importante, ho appena notato questo nel metodo init:
latitude = [latDbl doubleValue];
longitude = [longDbl doubleValue];
Non si sta utilizzando Objective-C 2 stile metodi supplementari (self.latitudine = ...) e non mantenendo la autoreleased valori.Questo probabilmente significa che le variabili che stanno scomparendo e che è perché non è possibile vedere le annotazioni, in quanto non sono validi coordinate.
Altri suggerimenti
Prova a impostare la latitudine e la longitudine come galleggianti.