Ошибка рисования полилинии в ios

Я создаю приложение, которое должно отображать маршрут между двумя точками.

MKPolyline *routeLine = [MKPolyline polylineWithCoordinates:locations count:2];
[mapView addOverlay:routeLine];

Два местоположения хранятся в массиве «местоположения».

я получаю сообщение об ошибке

Неявное преобразование типа указателя Objective-C «NSMutableArray *» в тип указателя C «CLLocationCoordinate2D *» требует мостового приведения

Пожалуйста, помогите мне с этим.
Заранее спасибо.


person chandru    schedule 22.11.2013    source источник
comment
Каков точный тип объектов, хранящихся в массиве locations?   -  person    schedule 22.11.2013
comment
Аннотации, содержащие координаты карты.   -  person chandru    schedule 22.11.2013
comment
После внесения изменений, предложенных в ответе, вы также реализовали метод делегата viewForOverlay или rendererForOverlay?   -  person    schedule 22.11.2013
comment
Нет, я первокурсник, я не знаю, что это за ню   -  person chandru    schedule 22.11.2013
comment
Я использовал код ниже, ошибка не появляется, но ничего не происходит   -  person chandru    schedule 22.11.2013
comment
Спасибо @AnnaKarenina, но это создает наложение (линию), я хочу нарисовать путь между двумя точками, не могли бы вы предложить мне что-нибудь для этого,   -  person chandru    schedule 25.11.2013
comment
Для iOS 7 см. api" title="есть ли способ проложить маршрут в mkmapview с помощью встроенного API Apple">stackoverflow.com/questions/19772900/. Для iOS 6 или более ранней версии вам нужно будет получить координаты маршрута из другого источника (например, Google Directions), но вы должны проверить, позволяет ли этот источник отображать свои данные на карте Apple.   -  person    schedule 25.11.2013
comment
Но, это только для ios7, я должен сделать так, чтобы он поддерживал с iOS5.0   -  person chandru    schedule 26.11.2013


Ответы (2)


Для этого метода требуется параметр типа массива CLLocationCoordinate2D. Вам нужно будет создать массив типа CLLocationCoordinate2D. Код будет выглядеть примерно так:

CLLocationCoordinate2D *coordsArray = malloc(sizeof(CLLocationCoordinate2D) * locations.count);

int i = 0;
for (CLLocation *loc in locations) {
    coordsArray[i] = loc.coordinate;
    i++;
}

MKPolyline * routeLine = [MKPolyline polylineWithCoordinates:coordsArray 
                        count:locations.count];

free(coordinateArray);

[mapView addOverlay:routeLine];
person Saad    schedule 22.11.2013
comment
Вы проверили правильность заполнения координат? и ур точки имеют правильные значения? - person Saad; 22.11.2013
comment
Я хорошо нанес точки с помощью раскадровки, и когда я нажимаю на эти аннотации, в текстовых полях отображаются их координаты, поэтому проблем с нанесением точек нет. - person chandru; 22.11.2013
comment
На самом деле, я не реализовал метод viewForOverlay, поэтому получил ошибку. Теперь понял. Спасибо - person chandru; 26.11.2013
comment
Но Polyline рисует прямую линию между двумя точками, а я хочу нарисовать путь между двумя точками. - person chandru; 26.11.2013

polylineWithCoordinates:count: принимает массив объектов типа CLLocationCoord2D, а count — это количество объектов в координатах. проверьте это ссылка. Я прочитал ваши комментарии ниже, и кажется, что ваши объекты в массиве (местоположениях) имеют тип MKAnnotations, а должны быть CLLocationCoord2D. Взгляните на это. Также ошибка говорит о том, что один из объектов этого массива (который вы предоставляете) содержит объект типа NSMutableArray. Может быть, где-то вы добавляете неправильные экземпляры. Взгляните на это тоже.

Позвольте мне знать, если это помогает.

person Dunes Buggy    schedule 22.11.2013
comment
Я сказал, что массив местоположения содержит объекты аннотаций, которые содержат координаты - person chandru; 22.11.2013
comment
да. Но K-компилятор этого не понимает. Вам нужно будет напрямую поместить эти координаты в массив, а не объекты (объекты аннотаций), которые имеют координаты. :П - person Dunes Buggy; 22.11.2013