我添加了一个 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];
}
然后就什么都没有画了。我在类型转换中做错了什么吗?
最佳答案
polylineWithCoordinates
方法需要类型为 CLLocationCoordinate2D
的纯 C 结构数组。
调用valueForKeyPath
后,coordinateArray
是NSValue
对象的NSArray
。
这与 C 结构数组不同。
将 NSArray
转换为 (CLLocationCoordinate2D *)
不会将其转换为 C 结构数组。
相反,您必须使用 malloc
手动创建 C 数组并循环遍历 locationRecoder
数组:
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];
关于iphone - 如何将 NSArray 更改为 MKPolyline polylineWithCoordinates 兼容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077334/