Создание нового CLLocationCoordinate2D в пользовательской широте/долготе - программирование

Создание нового CLLocationCoordinate2D в пользовательской широте/долготе

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

Я пытаюсь выполнить итерацию через некоторый 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);

Пока это не дает немедленных ошибок, когда я пытаюсь создать и запустить, это дает мне:

Undefined символы для архитектуры i386:    "_CLLocationCoordinate2DMake", на который ссылаются:       - [XMLParser parser: didStartElement: namespaceURI: qualifiedName: attributes:] в Checkpoint.o ld: символ не найден для архитектуры i386 collect2: ld возвращен 1 статус выхода

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

в ваших Импортах обязательно импортируется библиотека Mapkit.

#import <MapKit/MapKit.h>

Ответ 3

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

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

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

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

в

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

и

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

не может быть правильным, поскольку вы определили координату как 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;