我成功地将自定义注释添加到我的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
这是我的自定义注释使用:(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id)annotation
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;
}
以下是删除注释的方法:
[placesMapView removeAnnotations:placesMapPointsArray];
[placesMapPointsArray removeObjectsInArray:placesMapPointsArray];
从评论中获取信息后,我注意到我的mapView的viewDelegate已更改为“nil”。
答案 0 :(得分:1)
根据您的评论,问题显然是placesChamberArray
在第二次运行时没有任何类别为“COC”的对象。如果确实如此,则placesMapPointsArray必须包含一些项目,但NSLOg语句表明它没有。您可以通过在isEqualToString
之后放置NSLog并显示它未运行来验证这一点。
答案 1 :(得分:0)
在将新对象添加到数组后,您是否再次致电[placesMapView addAnnotations:placesMapPointsArray]
?