无法在地图上显示MKPolyline

时间:2013-05-16 13:16:31

标签: ios objective-c mkmapview mapkit mkpolyline

我正在用这些怪异的折线来对抗地狱......

我仍然无法在我的地图上显示它!

我实施了:

NSArray *points = [NSArray arrayWithObjects:
                   [[CLLocation alloc] initWithLatitude:45.43894 longitude:-73.7396],
                   [[CLLocation alloc] initWithLatitude:45.44073 longitude:-73.73998],
                   // 72 more like that…
                   nil];

(请注意,这些要点是githubNVPolyline存放处使用的。 首先,我尝试使用这些类,但我无法显示折线......)

然后我做(如here):

int numPoints = [points count];
CLLocationCoordinate2D *arrayPtr = malloc(numPoints * sizeof(CLLocationCoordinate2D));

for(int i = 0; i<numPoints; i++) {
    arrayPtr[i] = [[points objectAtIndex:i] coordinate];
}

polyline = [MKPolyline polylineWithCoordinates:arrayPtr count:numPoints];

[map addOverlay:polyline];

我没有添加折线叠加层,而是尝试了:

MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:polyline];
[map addSubview:polylineView];

先验,它应该有效,因为MKPolylineView继承自UIView,但它会崩溃。

这是日志:

-[CALayer levelsOfDetail]: unrecognized selector sent to instance 0x1d8319e0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer levelsOfDetail]: unrecognized selector sent to instance 0x1d8319e0'

我已经通过故事板设置了我的委托,但我也尝试添加[map setDelegate:self];,但没有任何变化。

我错在哪里以及为何?

感谢您的帮助和想法。

编辑,补充道:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id < MKOverlay >)overlay
{
    if ([overlay isKindOfClass:[MKPolyline class]])
    {
         MKOverlayView *pView = [[MKOverlayView alloc] initWithOverlay:overlay];
         return pView;
    }

    return nil;
}

仍然不行,我会白痴。

我也告诉你我的.h :(对我来说似乎不对)

@interface MapViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate>
{
    MKPolyline *polyline;
}

@property (weak, nonatomic) IBOutlet MKMapView *map;

@end

1 个答案:

答案 0 :(得分:0)

哈哈真是个笑话!

事实上,lineWidth的{​​{1}}默认设置为0 ...

(查看MKOverlayPathView class reference

首先我认为这是事情,但不是...... 重要的事情是设置MKOverlayPathView

因为我的strokeColor导致我的应用崩溃(我不明白为什么),我必须使用[map addSubview:polylineView];代替。

所以我补充道:

[map addOverlay:polyline];

感谢您的帮助@Kirualex:)。