我很难获得一些基本地图和路线在XCode中工作。
我已经解决了大部分错误,但是一些“预期标识符”和“缺少@interface”错误仍然存在。我对XCode相对较新,并且一直在关注在以下项目中制作折线的教程(压缩):
http://www.filefactory.com/file/74dn16qi8gmr(我本可以发布代码,但我认为实际项目对某人来说更容易诊断)
我已经适当地跟踪并编辑了原始代码,但问题仍然存在。 (由于某种原因,原始代码运行正常,但我发布的项目中的重新键入的版本存在问题)
我非常感谢任何指针!
(另外,我从未在规则中找到过发布.zip文件链接的规则。如果是问题,请告诉我。)
答案 0 :(得分:1)
好的,看看你的错误,它们都非常微不足道。首先,在PolylineAnnotation
中,initWithPoints
定义如下:
-(id) initWithPoints:(NSArray *)points mapView:(MKMapView *)mapView
{
_points = [[NSArray alloc] initWithArray:points];
_mapView = [mapView];
return self;
}
但是,
_points
是NSMutableArray
您应该如此定义; mapView
周围的方括号(方括号表示你调用方法的意图,但你只是设置一个变量);和[super init]
方法。 它应该看起来像:
-(id) initWithPoints:(NSArray *)points mapView:(MKMapView *)mapView
{
self = [super init];
if (self)
{
_points = [[NSMutableArray alloc] initWithArray:points];
_mapView = mapView;
}
return self;
}
其次,在ViewController
中,您正在定义本地点数组,如下所示:
NSArray *points = [[NSArray arrayWithObjects:
[[CLLocation alloc] initWithLatitude:46.908386 longitude:-96.806717],
[[CLLocation alloc] initWithLatitude:46.904749 longitude:-96.803198],
[[CLLocation alloc] initWithLatitude:46.904279 longitude:-96.80279],
[[CLLocation alloc] initWithLatitude:46.904279 longitude:-96.80279],
[[CLLocation alloc] initWithLatitude:46.893723 longitude:-96.802769],
nil];
但是你在开始时有一个额外的方括号。只需删除它:
NSArray *points = [NSArray arrayWithObjects:
[[CLLocation alloc] initWithLatitude:46.908386 longitude:-96.806717],
[[CLLocation alloc] initWithLatitude:46.904749 longitude:-96.803198],
[[CLLocation alloc] initWithLatitude:46.904279 longitude:-96.80279],
[[CLLocation alloc] initWithLatitude:46.904279 longitude:-96.80279],
[[CLLocation alloc] initWithLatitude:46.893723 longitude:-96.802769],
nil];
第三,在PolylineInternalAnnotationView.m
中,您可以使用以下行开始代码:
@interface PolylineInternalAnnotationView : UIView
{
PolylineAnnotationView* _polylineView;
MKMapView *_mapView;
}
- (id) initWithPolylineView:(PolylineAnnotationView *)polylineView
mapView:(MKMapView *)mapView {
if (self = [super init]) {
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = NO;
}
return self;
}
// your code continues
但是
@end
@interface
;和@implementation
应该是:
@interface PolylineInternalAnnotationView : UIView
{
PolylineAnnotationView* _polylineView;
MKMapView *_mapView;
}
@end
@implementation PolylineInternalAnnotationView
- (id) initWithPolylineView:(PolylineAnnotationView *)polylineView
mapView:(MKMapView *)mapView {
if (self = [super init]) {
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = NO;
}
return self;
}
// your code continues
第四,你有一行说
CgContextSetLineWidth(context, POLYLINE_WIDTH);
那应该是:
CGContextSetLineWidth(context, POLYLINE_WIDTH);
第五,PolylineAnnotationView
initWithAnnotation
_internalView = [[[PolylineAnnotationView alloc] initWithPolylineView:self mapView:_mapView]];
有一行说明:
PolylineInternalAnnotationView
我认为你的意思是(少了一组方括号,大概使用你的_internalView = [[PolylineInternalAnnotationView alloc] initWithPolylineView:self mapView:_mapView];
):
regionChanged
第六,在minpt
中,您永远不会初始化maxpt
和{{1}},因此,如果您可能没有任何注释点,则代码可能会出现意外行为。
这就是你的所有编译错误。顺便说一下,当你点击一个错误时,Xcode会带你到导致问题的精确代码行,这将使问题代码的识别和修复非常明显。如果您真的不理解错误,请确保查看我提出的修复程序,确实了解错误以及我如何解决错误。