杂项。演示代码中的错误

时间:2012-09-09 00:05:32

标签: ios xcode zip mapkit polyline

我很难获得一些基本地图和路线在XCode中工作。

我已经解决了大部分错误,但是一些“预期标识符”和“缺少@interface”错误仍然存​​在。我对XCode相对较新,并且一直在关注在以下项目中制作折线的教程(压缩):

http://www.filefactory.com/file/74dn16qi8gmr(我本可以发布代码,但我认为实际项目对某人来说更容易诊断)

我已经适当地跟踪并编辑了原始代码,但问题仍然存在。 (由于某种原因,原始代码运行正常,但我发布的项目中的重新键入的版本存在问题)

我非常感谢任何指针!

(另外,我从未在规则中找到过发布.zip文件链接的规则。如果是问题,请告诉我。)

1 个答案:

答案 0 :(得分:1)

好的,看看你的错误,它们都非常微不足道。首先,在PolylineAnnotation中,initWithPoints定义如下:

-(id) initWithPoints:(NSArray *)points mapView:(MKMapView *)mapView
{
    _points = [[NSArray alloc] initWithArray:points];
    _mapView = [mapView];

    return self;
}

但是,

  • _pointsNSMutableArray您应该如此定义;
  • 你不需要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会带你到导致问题的精确代码行,这将使问题代码的识别和修复非常明显。如果您真的不理解错误,请确保查看我提出的修复程序,确实了解错误以及我如何解决错误。