2010-05-18 5 views
0

사용자 정의 MKAnnotation 클래스 MapLocation을 만들었습니다. 이 메서드에서 MKAnnotationView를 만드는 경우를 제외하고는 속성을 설정하거나 가져 오는 데 문제가 없습니다. 어노테이션의 인덱스에서 위치 유형을 찾고 annotationView에 대한 커스텀 어노테이션 이미지 패밀리 중 하나를 선택해야하기 때문에 여기서이 작업을 수행해야합니다.사용자 정의 주석, '알 수없는 getter 메소드 액세스'

MapLocation.h 및 .m에서 맞춤 getter 및 setter를 설정하려는 시도가 여러 번 있었지만 필자는 (의무적 인) getter, title을 복사 할 수없는 곳에서 그것을 끓여서 title2로 이름을 바꾸고 반환 값을 얻는다.

-(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation { 
static NSString *[email protected]"Map Location Identifier"; 
NSString *str1=annotation.title; 
NSString *str2=annotation.title2; 
if([annotation isKindOfClass:[MapLocation class]]) { 
    MKAnnotationView *annotationView=(MKAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier]; 
    if (annotationView==nil) { 
     annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier]; 
    } 
    else 
     annotationView.annotation=annotation; 


    return annotationView; 
} 
return nil; 

} 4 번째 줄에

은, 제목이 제대로 반환되지만 복사 방법에 5 라인의 호출이 항목의 오류 메시지를 얻을 : 이것은 내 코드입니다.

나는 XCode 문서를 살펴 봤지만이 메서드에서 볼 수 있도록 아마도 선언하는 방법을 알지 못하고있다. 이상하게도 제목 getter가 표시되지만 title2 사본은 표시되지 않습니다. 점 표기법에서이에 라인을 변경

답변

3

시도 :

NSString *str2=[annotation title2]; 

및 오류 멀리 가야한다.

컴파일러에 주석이 MKAnnotation이라고 들었습니다. 그것이 가지고있는 다른 방법이 무엇인지 아는 사실은 무의미합니다. 컴파일러는 심령술사가 아닙니다. 주석은 MKAnnotation 프로토콜을 따릅니다. 타이틀을 얻는 이유는 getter가 제목이 MKAnnotation에 정의되어 있다는 것입니다.

또한 캐스트를 사용하여이 문제를 해결할 수 있습니다

MapLocation *mapLocation = (MapLocation *)annotation; 

을 지금, 당신은 mapLocation이 MapLocation의 obejct입니다 컴파일러 말 했어요 때문에

NSString *str2=mapLocation.title2; 

을 말할 수있다.

+0

사실 이미 답변 한 것을 보았을 때 MapLocation 프로토콜을 선언하는 방법을 실제로보고있었습니다. 이제는 주석에 필요한 색인을 연결하여 위치 유형에 맞는 올바른 이미지를 표시합니다. 감사! 이것은 작동하지 않았습니다 (전에 시도한 적이 있습니다) : NSString * str2 = [annotation title2]; -title2 알 수 없음이라고 표시됩니다. 인터페이스에서 선언하는 데 도움이되지 않습니다. 저와 같은 초보자에게는 약간 이상합니다. "컴파일러는 메시지에 대해 걱정할 필요가 없으므로 런타임입니다." 캐스트없이 추가 속성에 대해 불평 할 것이므로 이제는 이해합니다. 감사합니다. –

관련 문제