iphone - 如何将 NSArray 更改为 MKPolyline polylineWithCoordinates 兼容类型?

标签 iphone objective-c

我添加了一个 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后,coordinateArrayNSValue对象的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/

相关文章:

iphone - 如何从 View 返回一个或多个值?

iphone - Git: iOS 创建一个实验性的 iPad 分支

当按下 UITextField/UISearchBar 的清除按钮时 iPhone 执行操作

objective-c - iOS 水平滚动日历

ios - 雅虎 OAuth 错误 401 消费者 key 未知

iphone - 我在 Facebook 上的分享方式有什么问题?

iphone - iOS:为什么我不能将 nil 设置为 NSDictionary 值?

ios - 使用键盘滑动 UIScrollView 并向上移动 View

objective-c - GCD 和 RunLoop

ios - 这会导致保留周期吗? (obj-c,示例代码)