2011-07-18 9 views
30

Czuję się źle, gdy o to pytam, ponieważ wydaje się, że tak łatwo jest się rozłączyć, ale przyjrzałem się wszystkim odpowiednim zasobom, jakie mogłem, wypróbowałem jak najwięcej kombinacje dla rozwiązań, które widziałem innych używają i nic nie zadziałało ...Tworzenie nowej CLLocationCoordinate2D na niestandardowej szerokości/szerokości geograficznej

Próbuję iterować przez jakiś XML, który otrzymuję i analizować szerokość i długość geograficzną współrzędnych w pliku XML, i przechowywać go w tablicy, z której następnie ją spiskuję.

Mój problem polega na tym, że niezależnie od tego, jakiego typu używam, w jaki sposób go używam, co ty, xcode ZAWSZE znajduje jakiś problem z tym.

odpowiedniej części mojego pliku .h:

CLLocationCoordinate2D Coord; 
CLLocationDegrees lat; 
CLLocationDegrees lon; 

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

odpowiedniej części mojego pliku .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]; 
} 

Obecny błąd, że jestem coraz to: „Przypisywanie do„CLLocationCoordinate2D niezgodne z wpisz "id". Biorę to oznacza, że ​​wartość zwracana funkcji inicjowania jest niepoprawna, ale nie mam pojęcia, dlaczego, ponieważ jego wbudowana funkcja ...

Mam również Próbowałem, co może sprawić, że największy sens mi się, że widziałem ktoś inny robi:

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

Mimo, że nie zwraca żadnych natychmiastowych błędy, gdy próbuję zbudować i uruchomić go daje mi:

niezdefiniowane symbole Architektura i386: "_CLLocationCoordinate2DMake" odnosi z: - [XMLParser parser: didStartElement: URIprzestrzeninazw: qualifiedName: cechy:] w Checkpoint.o ld symbol: (i) nie znaleziono dla architektury i386 collect2 LD 1 zwrócony kod zakończenia

Każda pomoc/wyjaśnienie/sugestie w dobrym kierunku byłyby bardzo doceniane, ponieważ w tej chwili nie mam pomysłów.

+5

Nigdy nie bój się zadawać takich prostych pytań; po to tu jesteśmy. –

Odpowiedz

49

Co jest dla ciebie najbardziej sensowne (CLLocationCoordinate2DMake) jest poprawne. Po prostu zapomniałeś uwzględnić strukturę CoreLocation w swoim projekcie.

I, jak inni zauważyli, twój plik/lon w twoim pliku prawdopodobnie nie jest liczbą całkowitą.

+0

To ma sens, pomyślałem, że ma to związek z brakującą strukturą.

2

Spróbuj zmienić

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

do

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

także

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

nie może być prawidłowa, jak zdefiniowano COORD jako CLLocationCoordinate2D, który jest

  • nie CLLocation
  • nie klasa ale struct

co należy zrobić, to:

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; 
+0

Hej Joris, dzięki za szybką odpowiedź! Doceniam wyjaśnienie i ma to całkiem sensowny sens. Podałem zmiany, które zasugerowałeś, a skończyło się na tym, że otrzymałem komunikat "Wyrażam, że nie można przypisać". Mój kod jest identyczny z tym, co zasugerowałeś, naprawdę nie mam pojęcia, dlaczego xcode nie zatwierdza. Jeśli jest jakikolwiek sposób, mógłbym podać więcej informacji, daj mi znać, a ja edytuję główne pytanie! Dziękuję Ci! –

+0

Zmieniłem kod. To powinno zadziałać –

+0

Uświadomić sobie, że jest dość stary, ale typ CLLocationDegrees (z którego składa się CLLocationCoordinate2d) jest podwójny, a nie zmienny ... w zależności od wymaganej rozdzielczości, chcesz wywołać doubleValue zamiast floatValue. –

4

to powinno działać.

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

Hej Kal, dzięki za szybką odpowiedź, ale niestety otrzymuję ten sam zestaw błędów, który sugeruje mi propozycja Jorisa. Jeśli ty (lub Joris) masz jakieś pomysły na temat tego, dlaczego chciałbym dać im szansę. Dzięki! –

6

co zrobiłem było: najpierw utworzyć CLLocationCoordinate2D:

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

mój szerokość i długość geograficzna są podwójne typy.

w twoim imporcie upewnij się, że biblioteka Mapkit została zaimportowana.

#import <MapKit/MapKit.h> 
Powiązane problemy