#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) {