web-dev-qa-db-fra.com

Création d'un nouveau CLLocationCoordinate2D à une latitude / longitude personnalisée

Je me sens mal d'avoir posé cette question parce que cela semble être une chose si simple de se raccrocher, mais j'ai examiné toutes les ressources pertinentes que j'ai pu, essayé autant de combinaisons de solutions que j'ai vu d'autres utiliser, et rien n'a fonctionné ...

J'essaie d'itérer à travers du XML que je reçois et analyse la latitude et la longitude d'une coordonnée dans le XML, et le stocke dans un tableau à partir duquel je vais ensuite le tracer.

Mon problème est que peu importe le type que j'utilise, la façon dont je le transforme, ce que vous avez, xcode TOUJOURS trouve une sorte de problème avec lui.

Partie pertinente de mon fichier .h:

CLLocationCoordinate2D Coord;
CLLocationDegrees lat;
CLLocationDegrees lon;

@property (nonatomic, readwrite) CLLocationCoordinate2D Coord;
@property (nonatomic, readwrite) CLLocationDegrees lat;
@property (nonatomic, readwrite) CLLocationDegrees lon;

Partie pertinente de mon fichier .m:

else if ([elementName isEqualToString:@"Lat"]) {
        checkpoint.lat = [[attributeDict objectForKey:@"degrees"] integerValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
    checkpoint.lon = [[attributeDict objectForKey:@"degrees"] integerValue];
}
else if ([elementName isEqualToString:@"Coord"]) {
    checkpoint.Coord = [[CLLocation alloc] initWithLatitude:checkpoint.lat longitude:checkpoint.lon];
}

L'erreur actuelle que je reçois est: "Affectation à 'CLLocationCoordinate2D de type incompatible' id ''. Je suppose que cela signifie que la valeur de retour de la fonction d'initialisation est incorrecte, mais je n'ai aucune idée pourquoi, car c'est une fonction intégrée ...

J'ai également essayé ce qui serait le plus logique pour moi que j'ai vu quelqu'un d'autre faire:

checkpoint.Coord = CLLocationCoordinate2DMake(checkpoint.lat, checkpoint.lon);

Bien que cela ne renvoie aucune erreur immédiate, lorsque j'essaie de créer et d'exécuter, cela me donne:

Symboles non définis pour l'architecture i386: "_CLLocationCoordinate2DMake", référencé à partir de: - [Analyseur XMLParser: didStartElement: namespaceURI: qualifiéName: attributs:] dans Checkpoint.o ld: symbole (s) introuvable (s) pour l'architecture i386 collect2: ld a renvoyé 1 état de sortie

Toute aide/clarification/coup de pouce dans la bonne direction serait très appréciée car je suis très à court d'idées à ce stade.

31
Karoly S

Ce qui était le plus logique pour vous (CLLocationCoordinate2DMake) est correct. Vous avez juste oublié d'inclure le framework CoreLocation dans votre projet.

Et, comme d'autres l'ont souligné, vos lat/lon dans votre fichier ne sont probablement pas des entiers.

50
Firoze Lafeer

ce que j'ai fait était: d'abord créer un CLLocationCoordinate2D:

CLLocationCoordinate2D c2D = CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude); 

ma latitude et longitude sont des types doubles.

dans vos importations, assurez-vous que la bibliothèque Mapkit est importée.

#import <MapKit/MapKit.h>
8
Pedro Romão

Cela devrait fonctionner.

CLLocationCoordinate2D center;
.....
else if ([elementName isEqualToString:@"Lat"]) {
    center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
    center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
4
Kal

essayez de changer

[[attributeDict objectForKey:@"degrees"] integerValue]

dans

[[attributeDict objectForKey:@"degrees"] floatValue]

aussi

checkpoint.Coord = [[CLLocation alloc] ....

ne peut pas être correct car vous avez défini Coord comme étant CLLocationCoordinate2D, qui est

  • pas un CLLocation
  • pas une classe mais une structure

ce que vous devez faire c'est:

    CLLocationCoordinate2D coordinate;    

    else if ([elementName isEqualToString:@"Lat"]) {
        coordinate.latitude = [[attributeDict objectForKey:@"degrees"] floatValue];
    }
    else if ([elementName isEqualToString:@"Lon"]) {
        coordinate.longitude = [[attributeDict objectForKey:@"degrees"] floatValue];
    }

    checkpoint.Coord = coordinate;
2
Joris Mans