在iOS中,删除所有自定义批注和添加新自定义批注的正确方法是什么?

在iOS中,删除所有自定义批注和添加新自定义批注的正确方法是什么?,ios,ios7,mkmapview,mkannotationview,Ios,Ios7,Mkmapview,Mkannotationview,我正在成功地将自定义批注添加到MKMapView并成功地删除它们。我正在使用子视图控制器过滤地图视图上的注释。删除所有注释时,将新注释添加到地图视图时遇到问题。正在将正确的数据添加到注释数组中,但在使用数组添加注释时,注释不会添加到地图视图中。谢谢你的帮助 可能值得注意的是,当我在自定义注释if语句上放置断点时,它在我第一次将注释添加到地图视图时被调用,但不是第二次 这就是我添加注释的地方: for (placesChamber *placesObject in placesChamberArr

我正在成功地将自定义批注添加到MKMapView并成功地删除它们。我正在使用子视图控制器过滤地图视图上的注释。删除所有注释时,将新注释添加到地图视图时遇到问题。正在将正确的数据添加到注释数组中,但在使用数组添加注释时,注释不会添加到地图视图中。谢谢你的帮助

可能值得注意的是,当我在自定义注释if语句上放置断点时,它在我第一次将注释添加到地图视图时被调用,但不是第二次

这就是我添加注释的地方:

for (placesChamber *placesObject in placesChamberArray) {

    if ([placesObject.category isEqualToString:@"COC"]) {

        tealAnnotation *annotationTeal = [[tealAnnotation alloc] init];

        CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake([placesObject.latitude doubleValue],[placesObject.longitude doubleValue]);


        annotationTeal.coordinate = coordinates;

        annotationTeal.title = placesObject.name;

        annotationTeal.tealAnnotationClass = placesObject;

        [placesMapPointsArray addObject:annotationTeal];
    }

}

[placesMapView addAnnotations:placesMapPointsArray];

NSLog(@"Number of Places found: %lu",(unsigned long)placesMapPointsArray.count);

NSLog(@"Number of Places on map: %lu",(unsigned long)placesMapView.annotations.count);

if (!placesMapView.annotations || !placesMapView.annotations.count) {
    NSLog(@"There are 0 annotations.");

}//end if
[placesMapView removeAnnotations:placesMapPointsArray];
[placesMapPointsArray removeObjectsInArray:placesMapPointsArray];
这是我的自定义注释,使用:(MKAnnotationView*)映射视图:(MKMapView*)映射视图进行注释:(id)注释

if ([annotation isKindOfClass:[tealAnnotation class]]) // for
    {
        // try to dequeue an existing pin view first
        static NSString *TealAnnotationIdentifier = @"tealPin";

        MKPinAnnotationView *tealPinView =
        (MKPinAnnotationView *) [self.placesMapView dequeueReusableAnnotationViewWithIdentifier:TealAnnotationIdentifier];
        if (tealPinView == nil)
        {
            // if an existing pin view was not available, create one
            MKPinAnnotationView *tealAnnotationView = [[MKPinAnnotationView alloc]
                                                       initWithAnnotation:annotation reuseIdentifier:TealAnnotationIdentifier];

            tealAnnotationView.image = [UIImage imageNamed:@"teal_pin.png"];
            tealAnnotationView.canShowCallout = YES;
            tealAnnotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

            CGSize newSize;
            newSize.width = 32;
            newSize.height = 32;
            UIGraphicsBeginImageContext( newSize );
            [tealAnnotationView.image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
            UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            tealAnnotationView.image = newImage;

            return tealAnnotationView;
        }
        else
        {
            tealPinView.annotation = annotation;
        }
        return tealPinView;
    }
以下是我删除注释的方式:

for (placesChamber *placesObject in placesChamberArray) {

    if ([placesObject.category isEqualToString:@"COC"]) {

        tealAnnotation *annotationTeal = [[tealAnnotation alloc] init];

        CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake([placesObject.latitude doubleValue],[placesObject.longitude doubleValue]);


        annotationTeal.coordinate = coordinates;

        annotationTeal.title = placesObject.name;

        annotationTeal.tealAnnotationClass = placesObject;

        [placesMapPointsArray addObject:annotationTeal];
    }

}

[placesMapView addAnnotations:placesMapPointsArray];

NSLog(@"Number of Places found: %lu",(unsigned long)placesMapPointsArray.count);

NSLog(@"Number of Places on map: %lu",(unsigned long)placesMapView.annotations.count);

if (!placesMapView.annotations || !placesMapView.annotations.count) {
    NSLog(@"There are 0 annotations.");

}//end if
[placesMapView removeAnnotations:placesMapPointsArray];
[placesMapPointsArray removeObjectsInArray:placesMapPointsArray];

从注释中获取信息后,我注意到我的mapView的viewDelegate已更改为“nil”。

您是否调用了
[placesMapView addAnnotations:placesMapPointsArray]
在将新对象添加到数组中后,是否再次执行此操作?

根据您的评论,问题显然是
placesChamberArray
在第二次运行时没有任何类别为“COC”的对象。如果是这样的话,placesMapPointsArray将必须有一些项目,但NSLOg声明说没有。您可以通过在
IseQualtString
之后放置NSLog并显示它未运行来验证这一点。

尝试更改
[placesMapView removeAnnotations:placesMapPointsArray]
[placesMapView removeAnnotations:placesMap.annotations]@JoeFryer不起作用。仍然没有向地图视图添加注释。如果第二次没有触发哪个
if
语句?@JaiGovindani
if([annotation isKindOfClass:[tealAnnotation class]])
噢,好吧,很明显为什么没有添加注释,因为您没有点击该代码。主要问题是,为什么注释不是您期望的类型。在
if
语句(不在内部)上放置一个断点,当它到达该断点时,在调试器中执行
po theMapView.annotations
以查看地图视图的annotations Array中有哪些注释请参考我在引用Craig的问题时的注释,作为对您的回答。Craig,谢谢你的回答,但是placesCamberArray创建了带有for循环的placesMapPointsArray。我能够看到placesMapPointsArray具有正确数量的对象和正确的数据,并将其应用于正确的TealanNoAction类。但它永远不会出现在地图上。我误读了你的评论。您说placesMapPointsArray确实有项,但调用addAnnotations,然后调用annotations.count返回0。我听上去不可能。这里肯定有更多的代码在工作。原来这是我用来过滤的。一旦我去掉这个,它就工作了。我认为这是取消了我的地图视图授权,不允许我放置新的注释。