我有一个方法可以在mapview上为注释构建一个边界框。我正在尝试将当前用户的位置添加为注释,以确保它们包含在边界框中。
当我尝试将位置添加到NSMutableArray时,我收到一个错误,即参数CLLocationCoordinate2D与(id)不兼容。当我使currentLocation成为一个指针(即* currentLocation)时,我收到一个错误,它无法复制。
将此对象添加到NSMutable数组的有效方法是什么?有没有更好的方法来构建这个数组?
- (void)zoomMapViewToFitAnnotations:(MKMapView *)mapView animated:(BOOL)animated
{
CLLocation *location = [self.locationManager location];
CLLocationCoordinate2D currentLocation = [location coordinate];
NSMutableArray *annotations = [[NSMutableArray alloc] initWithObjects:currentLocation, nil];
[annotations addObjectsFromArray:mapView.annotations];
...
}
答案 0 :(得分:2)
CLLocationCoordinate2D
是一种C结构类型。这不是(OOP)对象。因此,您无法将其添加到Cocoa集合中。
但是,您可以将CLLocation
本身添加到数组中,或将CLLocationCoordinate2D
包装到NSValue
的实例中。
第一种方式是更好的方法,因为地图视图的注释符合MKAnnotation
协议,该协议声明了由-coordinate
个实例提供的方法CLLocation
。 。
- (void)zoomMapViewToFitAnnotations:(MKMapView *)mapView animated:(BOOL)animated
{
CLLocation *location = [self.locationManager location];
NSMutableArray *annotations = [[NSMutableArray alloc] initWithObjects:currentLocation, nil];
[annotations addObjectsFromArray:mapView.annotations];
// Build bounding box
for( id location in annotations )
{
CLLocationCoordinate2D = [location coordinate];
…
}
...
}