在我的应用中,我在地图上绘制折线叠加层,其中的点从用户位置开始,从didUpdateUserLocation:
委托方法获得。
但由于某种原因,它总是从非洲开始。
可能是什么原因?我是否必须为折线指定任何起始坐标?
-(void)drawTheRoute{
[self.mapViewTrace removeOverlay:self.polyline];
CLLocationCoordinate2D coordinates[arrayOfPoint.count];
int i = 1;
for (TMPoint *point in arrayOfPoint) {
coordinates[i] = point.coordinate;
i++;
}
MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coordinates count:arrayOfPoint.count];
[self.mapViewTrace addOverlay:polyline];
self.polyline = polyline;
self.lineRenderer = [[MKPolylineRenderer alloc] initWithPolyline:self.polyline];
self.lineRenderer.strokeColor = [UIColor redColor];
self.lineRenderer.lineWidth = 5;
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
TMPoint *point = [[TMPoint alloc] initWithCoordinate:userLocation.location.coordinate withSpeed:userLocation.location.speed];
[arrayOfPoint addObject:point];
[self drawTheRoute];
}
答案 0 :(得分:0)
在drawTheRoute
方法中,C数组coordinates
使用arrayOfPoint.count
元素声明,for
循环使用i
初始化C数组的每个索引作为索引变量。
问题是i
索引变量最初设置为1而不是0。
C数组的第一个索引(和NSArray
s)是索引0 - 而不是1.
这使得coordinates
的第一个坐标保持未初始化,并且内存恰好包含被解释为坐标0,0的值(有时候"随机"坐标)。
(另一个影响是,当arrayOfPoint
只有一个对象时,C数组只有一个索引为0的元素。但是由于i
初始化为1,{{1循环将最终设置C数组的索引1(第二个元素),即使只分配了一个内存元素,并且您将访问未分配给您的内存,这可能导致EXC_BAD_ACCESS。)
更改此行:
for
到此:
int i = 1;