Не работает доступ к типу пользовательского перечислителя аннотаций

#cocoa-touch #ios4 #annotations #mkmapview #getter

#cocoa-touch #ios4 #аннотации #mkmapview #средство получения

Вопрос:

Привет, у меня возникли проблемы с доступом к переменной в пользовательском классе аннотаций, который я определил. Вот соответствующий код:

ArboretumAnnotation.h (заголовок класса пользовательских аннотаций):

 #import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
typedef enum { //correspond to permit types
    arboAnnoTypeNone = 0,
    arboAnnoTypeShieldsOakGrove
} arboAnnoType;

@interface ArboretumAnnotation : NSObject <MKAnnotation> {
    NSString *title;
    NSString *subtitle;
    UIImage *image;

    CLLocationCoordinate2D coordinate;
    arboAnnoType annotEnumType;

}

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *subtitle;
@property (nonatomic, retain) UIImage *image;

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic) arboAnnoType annotEnumType;

@end
  

Пожалуйста, обратите внимание, что все объявленные свойства были синтезированы в файле реализации.

MapViewController.m:

 - (void)mapView:(MKMapView *)mapView 
 annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control
{

    //show detail view but first set the view with the appropriate title
    LocationDetailViewController *locationDetail = [[LocationDetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
    NSLog(@"permitDetail.title: %@", locationDetail.title);
    if (view.annotation.annotEnumType == arboAnnoTypeShieldsOakGrove) { //PROBLEM LINE
        locationDetail.title = @"Shields Oak Grove";
        locationDetail.annotEnumType = arboAnnoTypeShieldsOakGrove;
    }
    else {
        locationDetail.title = view.annotation.title;
        locationDetail.annotEnumType = arboAnnoTypeNone;
    }
    [self.navigationController pushViewController:locationDetail animated:YES];
    [locationDetail release];

}
  

В строке с комментарием: //PROBLEM LINE Я получаю следующую ошибку:

 MapViewController.m:148: error: accessing unknown 'annotEnumType' getter method
  

Даже если я изменю эту строку на:

 if ([view.annotation annotEnumType] == arboAnnoTypeShieldsOakGrove) {
  

Я получаю следующее предупреждение:

 MapViewController.m:148: warning: '-annotEnumType' not found in protocol(s)
  

Есть идеи, что я делаю не так? Заранее спасибо!

Ответ №1:

Попробуйте сначала привести его к вашему пользовательскому типу аннотации, потому что свойство annotation само по себе просто id<MKAnnotation> :

 ArboretumAnnotation *arboretumAnnot = (ArboretumAnnotation *)view.annotation;
if (arboretumAnnot.annotEnumType == arboAnnoTypeShieldsOakGrove) {