将对象添加到NSMutableArray

时间:2015-08-06 21:21:51

标签: ios objective-c

我有一个方法可以在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];
...
}

1 个答案:

答案 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];
      …
    }
...
}