2013-05-16 2 views
0

Я борюсь черт с тезисами бесконтрольными ломаными ...Невозможно отобразить 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]; 

(Обратите внимание, что тезисы точки thoses используются в NVPolyline депозитария на github Сначала я пытался использовать тезисы классов, но я не мог отобразить полилинии либо ....)

Тогда я (как 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];, но ничего не меняется.

Где и почему я ошибаюсь?

Спасибо за помощь и идеи.

EDIT, добавлено:

- (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 
+0

У вас есть журнал аварий? – Kirualex

+0

Вы заглянули в пример Apple [breadcrumb] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Listings/ReadMe_txt.HTML # // apple_ref/DOC/UID/DTS40010048-ReadMe_txt-DontLinkElementID_11)? Он используется для отслеживания пути пользователей на карте. Вы можете изменить его в соответствии с вашими потребностями. – Amar

+0

Да, я уже посмотрел, но я только что получил голубую точку и ничего больше. Я просто могу получить доступ к информационной кнопке. И приложение ничего не делает. Weird. – Lucien

ответ

0

Ха-ха, что шутка!

В самом деле, lineWidth из MKOverlayPathView по умолчанию устанавливается на 0 ...

(Проверьте MKOverlayPathView class reference)

Сначала я думал, что это была вещь, но это нет ... важная вещь должна иметь a strokeColor комплект.

И потому что мой [map addSubview:polylineView]; делает мое приложение аварийным (и я не понимаю почему), вместо этого я должен использовать [map addOverlay:polyline];.

Поэтому я добавил:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    MKPolylineView *thePolylineView = [[MKPolylineView alloc] initWithPolyline:overlay]; 
    thePolylineView.strokeColor = [UIColor purpleColor]; // <-- So important stuff here 
    thePolylineView.lineWidth = 5.0; 
    return thePolylineView; 
} 

Спасибо за вашу помощь @Kirualex :).