5

我添加了一个 NSTimer 来记录来自位置管理器的位置,并将任何位置放入 NSMutableArray。

-(void)OnTimer:(NSTimer *)param{
     [self.locationRecoder addObject:self.manager.location];
}

我向 UI 添加了一个按钮,当我单击该按钮时,它会调用此方法

-(IBAction)Click:(id)sender(){
   NSArray *coordinateArray = [self.locationRecorder valueForKeyPath:@"coordinate"];
   MKPolyline *lines = [MKPolyline ploylineWithCoordinates:(CLLocationCoordinate2D *)coordinateArray count:coordinateArray.count];
   [self.map addOverlay:lines];
}

然后没有绘制任何东西。我在类型转换中做错了吗?

4

1 回答 1

15

polylineWithCoordinates方法需要一个简单的 C 类型结构数组CLLocationCoordinate2D

在调用valueForKeyPath,之后是coordinateArray一个对象。 这与 C 结构数组不同。NSArrayNSValue

将其转换NSArray(CLLocationCoordinate2D *)不会将其转换为 C 结构数组。

相反,您必须使用malloc并循环遍历数组手动创建 ClocationRecoder数组:

CLLocationCoordinate2D *coordinateArray 
    = malloc(sizeof(CLLocationCoordinate2D) * locationRecorder.count);

int caIndex = 0;
for (CLLocation *loc in locationRecorder) {
    coordinateArray[caIndex] = loc.coordinate;
    caIndex++;
}

MKPolyline *lines = [MKPolyline polylineWithCoordinates:coordinateArray 
                        count:locationRecorder.count];

free(coordinateArray);

[self.map addOverlay:lines];
于 2012-10-26T01:29:48.043 回答