문제

현재 나는 키 가치 코딩에 관한 모든 것을 배우고 있습니다.

문서에서 그들은 다음과 같이 말합니다.

키 경로 시퀀스의 모든 객체는 키 값 코딩이 아닌 적절한 키를 준수하는 모든 객체는 valueforundefinedkey : message를 수신합니다.

객체가 키 가치 코딩 준수가 아닌 상황을 상상하려고합니다. 어떻게 그렇게 될 수 있습니까? Uiview를 서브 클래스 할 때는 분명히 준수합니까? 그러나 내가 nsObject로 슈퍼 클래스로 내 자신의 객체를 만들 때, 그게 어때? 그리고 슈퍼 클래스가없는 클래스를 만들 때 이것이 KV를 준수하지 않습니까?

도움이 되었습니까?

해결책

신중하게 읽으면 "키 값 코딩 준수"라고 표시됩니다. 적절한 키를 위해". 이것은 기본적으로 요청한 키에 적합한 KVC 방법이 없다는 것을 의미합니다. [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"], 그것은 끝날 것입니다 valueForUndefinedKey: NSString은 "DippingsAuce"키에 대해 KVC를 준수하지 않기 때문에 dippingSauce 인스턴스 방법 또는 a dippingSauce 이바.

다른 팁

"그것은 키 가치 코딩을 준수하는 것이 아닙니다 적절한 키를 위해. "그게 의미는 그 의미입니다

@interface MyObject : NSObject {
  NSString *foo;
  NSString *bar;
}

@property (nonatomic, retain) NSString *foo;
@property (nonatomic, retain) NSString *bar;

@end

@interface MyObject

@synthesize foo;
@synthesize bar;

@end

"foo"및 "bar"를 준수하지만 "BAZ"는 아닙니다.

모든 NSObject 서브 클래스는 기본적으로 기본적으로 기본 KVC를 구현합니다. 컬렉션이 까다로워집니다. KVC가 컬렉션을 올바르게 작동 시키려면 다음과 같은 작업을 수행 할 수 있습니다.

NSArray *people = ... ;
NSArray *firstNames = [people valueForKey:@"firstName"];

특정 추가 방법을 구현해야합니다. 일반적으로 해당 기능의 가장 큰 사용자는 CoCoa 바인딩 (iPhone에서 사용할 수 없음)이 Coredata (어쨌든 추가 수집 방법을 자동으로 생성 함)에서 일반적으로 기본적으로 자동 처리됩니다. 일반적으로 사람들은 실제로 노출하려고하지 않는 한 사전 또는 배열에 대한 전체 KVC 지원을 구현하지 않습니다. 당신은 할 수 있습니다 읽다 KVC 안내서의 준수에 대해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top