Создание нового CLLocationCoordinate2D с пользовательской широтой / долготой - PullRequest
31 голосов
/ 19 июля 2011

Мне жаль, что я спрашиваю об этом, потому что мне кажется, что зацикливаться на этом довольно просто, но я посмотрел на каждый соответствующий ресурс, который мог, попробовал столько комбинаций для решений, сколько видел других использовать, и ничего не работает ...

Я пытаюсь перебрать некоторый XML, который я получаю, и проанализировать широту и долготу координаты в XML, и сохранить ее в массиве, из которого я затем построю его.

Моя проблема в том, что независимо от того, какой тип я использую, как я его разыгрываю, что у вас, xcode ВСЕГДА обнаруживает какую-то проблему с ним.

Соответствующая часть моего .h файла:

CLLocationCoordinate2D Coord;
CLLocationDegrees lat;
CLLocationDegrees lon;

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

Соответствующая часть моего .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];
}

Текущая ошибка, которую я получаю: «Присваивание 'CLLocationCoordinate2D из несовместимого типа' id ''. Я предполагаю, что это означает, что возвращаемое значение функции инициализации неверно, но я понятия не имею, почему, поскольку его встроенная функция ...

Я также попробовал, что было бы для меня наиболее разумным, если бы я увидел, что кто-то другой делает:

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

Хотя это не возвращает немедленных ошибок, при попытке собрать и запустить это дает мне:

Неопределенные символы для архитектуры i386: "_CLLocationCoordinate2DMake", на который ссылаются из: - [синтаксический анализатор XMLParser: didStartElement: namespaceURI: квалифицированное имя: атрибуты:] в Checkpoint.o ld: символ (ы) не найден для архитектуры i386 collect2: ld вернул 1 статус выхода

Любая помощь / разъяснение / подталкивание в правильном направлении будет очень цениться, потому что у меня очень нет идей на данный момент.

Ответы [ 4 ]

50 голосов
/ 19 июля 2011

Что имело для вас наибольшее значение (CLLocationCoordinate2DMake), правильно.Вы просто забыли включить инфраструктуру CoreLocation в свой проект.

И, как уже отмечали другие, ваш лат / лон в вашем файле, вероятно, не являются целыми числами.

7 голосов
/ 21 июля 2014

что я сделал: сначала создайте CLLocationCoordinate2D:

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

моя широта и долгота имеют двойные типы.

в ваших импорте убедитесь, что библиотека Mapkit импортирована.

#import <MapKit/MapKit.h>
4 голосов
/ 19 июля 2011

Это должно работать.

CLLocationCoordinate2D center;
.....
else if ([elementName isEqualToString:@"Lat"]) {
    center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
    center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
2 голосов
/ 19 июля 2011

попробуйте изменить

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

в

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

также

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

не может быть правильным, так как вы определили Coord как CLLocationCoordinate2D, что

  • не является CLLocation
  • не класс, а структура

что вы должны сделать, это:

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...