我觉得这个问题很糟糕,因为看起来这么简单,但是我已经查看了所有相关的资源,尝试了很多我见过的解决方案组合使用,没有任何工作......
我正在尝试迭代我收到的一些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];
}
我得到的当前错误是:“从不兼容的类型'id''分配给'CLLocationCoordinate2D。我认为这意味着初始化函数的返回值不正确,但我不知道为什么因为它的a内置功能...
我也尝试了一些对我来说最有意义的事情,我看到别人在做什么:
checkpoint.Coord = CLLocationCoordinate2DMake(checkpoint.lat, checkpoint.lon);
虽然这不会立即返回错误,但当我尝试构建并运行它时,我会:
架构i386的未定义符号: “_CLLocationCoordinate2DMake”,引自: - Checkpoint.o中的[XMLParser解析器:didStartElement:namespaceURI:qualifiedName:attributes:] ld:找不到架构i386的符号 collect2:ld返回1退出状态
在正确的方向上任何帮助/澄清/推动都会非常感激,因为我现在非常缺乏想法。
答案 0 :(得分:49)
对您来说最有意义的(CLLocationCoordinate2DMake)是正确的。您只是忘了在项目中包含CoreLocation框架。
而且,正如其他人所指出的那样,文件中的纬度/经度可能不是整数。
答案 1 :(得分:7)
我做的是: 首先创建一个CLLocationCoordinate2D:
CLLocationCoordinate2D c2D = CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude);
我的纬度和经度是双重类型。
在Imports中确保导入Mapkit库。#import <MapKit/MapKit.h>
答案 2 :(得分:4)
这应该有用。
CLLocationCoordinate2D center;
.....
else if ([elementName isEqualToString:@"Lat"]) {
center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
答案 3 :(得分:2)
尝试更改
[[attributeDict objectForKey:@"degrees"] integerValue]
到
[[attributeDict objectForKey:@"degrees"] floatValue]
也
checkpoint.Coord = [[CLLocation alloc] ....
无法正确,因为您将Coord定义为CLLocationCoordinate2D,即
你应该做的是:
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;