2010-06-11 3 views
1

the Core Data docs에서 :그래서이 전화는 어디에서 최고입니까?

상속 두 개의 서브 클래스 부모 클래스가 동적 특성 와 그 서브 클래스 ( NSManagedObject의 손자)를 구현 NSManagedObject의 이 속성에 대한 방법 을 무시하는 경우, 그 무시 super를 호출 할 수 없습니다.

@interface Parent : NSManagedObject 
@property(nonatomic, retain) NSString* parentString; 
@end 

@implementation Parent 
@dynamic parentString; 
@end 

@interface Child : Parent 
@end 

@implementation Child 
- (NSString *)parentString 
{ 
    // this throws a "selector not found" exception 
    return parentString.foo; 
} 
@end 

매우 재미 있고, 때문에 : 나는 아무도 슈퍼를 호출하지 참조하십시오. 아니면 그들은 무엇입니까? 잠깐 ... parentString.foo 결과는 ... 크래시 ??? 그것은 문자열입니다. 어떻게 그 물건에 .foo 접미사가 붙을 수 있니? 또 다른 문서 버그?

+0

Apple에서 문서 피드백 용으로 표시했습니다. 당신도 그렇게해야합니다. – TechZen

+0

어떻게 그리고 어디서? 그것은 하루 종일 올바른 사람을 찾지 않을 경우 그렇게하는 것을 좋아합니다.) – dontWatchMyProfile

답변

1

예제가 깨져 있습니다.

@dynamic 메서드가 런타임에서 만들어지기 때문에 상속 문제가 발생했는지 확신 할 수 있습니다. 컴파일러는 심볼을 만들려고 시도하지 않습니다. 부모 클래스가 인스턴스화되지 않으면 메소드가 전혀 존재하지 않는다고 생각합니다. 따라서 하위 클래스 인스턴스가 호출 할 라이브 선택기/심볼을 갖는 것은 실제로 불가능합니다.

자동 런타임 코드 생성에는 절충이 필요합니다.

관련 문제