2012-10-25 35 views
4

我添加了一個NSTimer來記錄位置管理器的位置,並將永遠位置放入NSMutableArray中。我如何將NSArray更改爲MKPolyline polylineWithCoordinates兼容類型?

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

,我添加一個按鈕,用戶界面,當我按一下按鈕,它調用此方法

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

那麼就沒有繪製。在投入類型時我做錯了什麼?

+1

鑄造並不神奇,它不會使一個NSArray轉型爲一個'CLLocationCoordinate2D'。也許你可以在數組中使用'objectAtIndex:'獲得NSValue,然後你可以從中提取位置值。 – 2012-10-25 21:13:04

回答

12

polylineWithCoordinates方法需要一個簡單的C數組,結構類型爲CLLocationCoordinate2D

在致電valueForKeyPath之後,coordinateArrayNSValueNSArray對象。
這與C數組結構不同。

鑄造NSArray(CLLocationCoordinate2D *)不會將其轉換爲C數組結構體。

相反,你必須創建C數組使用手動malloc並通過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]; 
相關問題