2012-04-14 7 views
4

일반적인 사용자의 접근 방법은 다음과 같이 쓸 수있다 :핵심 데이터의 사용자 지정 접근 방법, KVO를 사용하는 이유는 무엇입니까?

- (NSString *)name 
{ 
    [self willAccessValueForKey:@"name"]; 
    NSString *myName = [self primitiveName]; 
    [self didAccessValueForKey:@"name"]; 
    return myName; 
} 

- (void)setName:(NSString *)newName 
{ 
    [self willChangeValueForKey:@"name"]; 
    [self setPrimitiveName:newName]; 
    [self didChangeValueForKey:@"name"]; 
} 

그것은 setPrimitiveName의 의미는 분명하다. KVC없이 "원시"변수에 접근하고 (접근 자 내부에서 실행 루프를 방지) 전달 된 값을 설정할 수 있습니다. 동일한 관찰을 게터에 적용 할 수 있습니다.

설명서에서 setPrimitiveName은 변경 알림 방법을 사용 중지합니다 (예 : willChangeValueForKey).

이제 내 질문은 다음과 같습니다. 왜 그 방법을 willChangeValueForKey:didChangeValueForKey: 방법으로 마무리해야합니까?

NSManagedObject 모델링 속성 (KVO) 변화를 알림 관찰 자동 키 값을 비활성화하고 프리미티브 접근 방법은 액세스 및 변경을 호출하지 않는다 : 코어 데이터 프로그래밍 읽기

는 기입이 통지 방법. Mac OS X v10.4 코어 데이터의 unmodeled 속성 일 경우 자동 KVO도 비활성화됩니다. Mac OS X v10.5 이상에서는 Core Data가 NSObject의 동작을 채택합니다.

키 (액세서 ​​또는 인스턴스 변수)에 액세스 할 준비가되었음을 알리고 그 작업을 완료해야하는 이유는 무엇입니까? 누구에게 통보됩니까?

희망 사항은 분명합니다. 미리 감사드립니다.

답변

5

귀하의 가치가 변경되었음을 알리는 것이 필요합니다. 예를 들어 MKMapView을 사용하고 코어 데이터에서 좌표를 가져 와서 주석을 추가 한 다음 어떻게 든 위치를 변경한다고 가정 해 보겠습니다.

getter/setter가 이러한 알림을 게시하지 않은 경우 MKMapView은 이러한 위치 변경을 알 수 없으며 새 위치로 이동하지 않습니다.

이러한 알림을 사용하여 개체의 생성/변경 날짜를 추적 할 수도 있습니다.

내가 생각하기에이 재실행/실행 취소도 이와 관련되어 있습니다.

참고

내가 코어 데이터는 후드 아래에 어떻게 든 이러한 알림을 사용하는 경우 알고 싶습니다

. 아무도이 주제에 대해 아이디어가 있습니까?

+1

귀하의 지원에 +1. 이는 단지 견해 나 다른 것이 관련되어 있음을 알리는 데 필요한 것입니까? –

+0

그 예가 지금까지 발견되었지만 더 흥미로운 것이있을 수 있습니다. –

+2

예, 코어 데이터는 오류를 발생시키고 개체를 채우는시기를 알기 위해이를 사용합니다. –

관련 문제