2011-06-12 4 views
0

배열에 MKPolygon이 저장되어 있지만, MKPolygon 클래스가 저장하는 데이터보다 더 많은 데이터를 저장하고 싶습니다 (더 구체적으로 : 그 폴리곤이 무엇인지 설명하는 메모 필드) . 하위 클래 싱은 어떤 이유로 인해 가능하지 않으므로 연관 객체 기능을 찾았습니다. 이는 내 용도로 충분합니다.연관 객체를 사용하는 프로토콜 오류에서 찾을 수 없음

@implementation MKPolygon (ExtraProperties) 

static char notesKey; 

- (void)setNotes:(NSString *)notes { 

    objc_setAssociatedObject(self, &notesKey, notes, 1); 
} 

- (NSString *)notes { 

    return objc_getAssociatedObject(self, &notesKey); 
} 

내 .H 바로이 범주에 대한 속성 선언 :이처럼 내하는 .m는 모습입니다

@interface MKPolygon (ExtraProperties) 
@property (nonatomic, retain) NSString *notes; 
@end 

속성이 잘 작동 노트, 오류없이 설정하고이 변수를 저장하기 위해 나타납니다 . 반면에 그것을 얻는 것은 효과가 있지만, 그 프로토콜에서 주석이 발견되지 않는다는 경고를줍니다. 두 번째 인수가 MKAnnotation 프로토콜을 준수하는 id 인 내 mapView:viewForAnnotation: 메서드에서이 '오버레이가 주석으로 추가되었으며 프로토콜에서 찾을 수없는'오류가 발생한다는 것을 알려주는 것이 중요합니다.

이제는 MKAnnotation 프로토콜이 -notes 메소드를 구현하지 않는다는 것을 알았지 만, 결코 그런 주장을하지 않습니다. 나는 두 개의 추가 메소드 (getter/setter)로 카테고리를 만들었으므로, 카테고리에 대한 나의 이해가 정확하다면, 이제는 노트가 MKPolygon의 메소드로 간주된다. 그렇다면 컴파일러가 왜이 경고를 내고 있습니까?

또한 주목할 가치가 있습니다 : 메서드를 호출하면 실제로 작동합니다. 올바른 결과를 얻지 만 코드에서 경고하는 것을 좋아하지 않습니다. 그것이 MKAnnotation 오류이기 때문에

답변

0

는 ... "MKAnnotation"잘못된 것은 넣을 수 있습니다

id<MKAnnotation,NSObject> delegate;

, 당신은 좋겠 ... 아마 이런 식으로 뭔가 ... 당신의 ID에 그것을 implimenting 시도 xcode 라이브러리에서 찾아야하지만 그건 내 최선의 추측이야 ... 행운을 빌어 요. 잘하면 행운을 빕니다./: haha ​​

+0

그건 도움이되지 않았지만, 나는 찾지 못했습니다. 해결책. viewForAnnotation :의 인수가'id '이었기 때문에, MKAnnotation 프로토콜을 따르는 객체가 허용되었고, -notes 메소드를 구현하지 않은 클래스의 인스턴스도 수용되었습니다. 주석의 클래스가 MKPolygon인지 확인한 후, 변수를 MKPolygon에 typecast했고 경고가 사라졌습니다. –

+0

당신이 일하는 것을 알고있어 다행 !!!!!!! :) –

관련 문제