2014-10-24 2 views
0

lastName 속성을 갖는 Person이라는 코어 데이터 엔티티가 있다고합시다.코코아 바인딩에 두 가지 속성을 통합하십시오

firstName 또는 lastName이 일반적인 코코아 바인딩 방식으로 업데이트 될 때마다 업데이트되는 tableView에 해당 사용자의 전체 이름 또는 firstName + lastName을 표시하려고합니다.

해당 작업을 수행하려면 무엇이 필요합니까? 그 두 속성을 기반으로 형식화 된 문자열을 반환하는 메서드에 바인딩하는 방법을 생각해 보았습니다. 두 가지 속성 중 하나가 업데이트 된 경우 해당 메서드의 업데이트를 트리거하는 방법을 알아 냈습니다. 꽤 어떻게/어디서 그런 일이 일어날 지 확신합니다.

답변

1

fullNameregister dependent keyPaths이라는 게터를 생성하려고합니다.

덧붙여 말하자면 코드는 정확히입니다. firstName 또는 lastName가 업데이트 될 때마다

- (NSString*) fullName 
{ 
    return [NSString stringWithFormat:@"%@ %@",firstName,lastName]; 
} 

+ (NSSet *)keyPathsForValuesAffectingFullName { 
    return [NSSet setWithObjects:@"lastName", @"firstName", nil]; 
} 

fullName의 KVO 관계자는 값이 변경되었다는 메시지가. 여기에는 fullName에 바인딩 된 항목이 포함됩니다.

이 패턴으로 매우 멋진 작업을 수행 할 수 있습니다 (like have changes in an object graph trigger recalculation of properties describing the object graph). 거기에 약간의 트릭이 어디에 내가 부모 클래스에 의존의 관계를 재 계산 강제로 자식 클래스에서 빈 setter를 호출 거기에 children keyPath. 이것은 KVO 관측자 등록의 (그리고 고통스러운) 애플의 제안을 피한다. 자식 클래스의 종속 keypaths에서 코드를 소유하고있는 한, 자식의 인스턴스 메서드는 자식의 keypaths에 종속을 사용하는 getter에 대한 호출을 트리거하는 부모 클래스의 종속 속성을 호출하게 할 수 있습니다. 따라서 실제적으로, 부모 클래스가 각 어린이의 KVO 관찰자로 등록하는 코드의 거친 고통을 유지하도록 제안하는 것을 피하십시오.