2010-12-04 8 views
1

아직 핵심 데이터가 작동하는 방식에 익숙해 져 있으며 문제에 대한 정보를 둘러 보았지만 정확히 내 정확한 주소를 찾지 못했습니다. 문제.관련 개체의 속성이 변경 될 때 핵심 데이터 개체 업데이트

나는 대출, 차용인, 사진의 3 가지 관리 객체 클래스를 가지고 있습니다. 차용 물체는 대출 대상과 일대 다 관계를 맺습니다 (차용인은 둘 이상의 대출을 가질 수 있지만 차용자는 한 명의 차용자 만 가질 수 있습니다). 차용 오브젝트도 사진 오브젝트와 일대일 관계가 있습니다.

NSFetchedResultsController를 사용하여 대출 오브젝트 집합의 변경 사항으로 테이블을 최신 상태로 유지하려고합니다. 다른 차용 속성이 변경되면 변경 알림이 NSFetchedResultsController에 도달하고 내 테이블이 업데이트됩니다. 그러나 사진 속성이 다른 사진 객체를 가리 키도록 변경되면 NSFetchedResultsController에 아무런 알림도 전달되지 않습니다. 차용인이 사진 관계를 변경할 때 차용인과 관련된 대출은 없다고합니다.

도와주세요!

답변

2

NSManagedObjectContextObjectsDidChangeNotification 알림을 처리 할 수 ​​있습니다.

+0

+1 이것이 최선의 방법입니다. 이 상황이 통지를위한 것입니다. – TechZen

+0

멋지다, 이것은 매력처럼 일했다. 도와 주신 모든 분들께 감사드립니다! –

0

다소 squirrelly하지만 대출, 차용자 및 사진 클래스 용 NSManagedObject를 서브 클래 싱했다고 가정하면 다음을 수행 할 수 있습니다.

1.) 대출에서 사진의 '이미지'속성으로 KVO를 설정하십시오.

2.) 대출에서 changeCount 속성 (NSNumber *)을 추가하십시오.

3. 대출 사진의 이미지가 변경 될 것을 알리면 changeCount를 증가 시키십시오.

그래서,이 같은 매우 거친 코드, 뭔가 : Load.m에서

:

- (void) awakeFromFetch 
    { 
    [super awakeFromFetch]; 

    [[self photo] addObserver:self 
     forKeyPath:@"image" 
     options:NSKeyValueObservingOptionNew 
     context:nil]; 
    } 


- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
    { 
    if ([keyPath isEqualToString:@"image"]) 
     { 
     NSInteger temp = [[self changeCount] intValue]; 
     ++temp; 
     [self setChangeCount:[NSNumber numberWithInteger:temp]]; 
     } 
    } 

몇 가지주의 사항이있다.

1) '가져 오기'및 이 아닌 ''만 '삽입'(즉, 신규 대출)으로 처리합니다.

2) 이것은 가져온 대출에 사진이있는 것으로 가정합니다.

3) 'changeCount'속성을 Loan에 추가했다고 가정합니다.

4) 내 응용 프로그램 중 하나에서 원격으로 비슷한 메커니즘을 사용하지만 필자는 이것을 테스트하지 않았습니다.

+0

샘플 코드를 보여 주시겠습니까? 나는 아직 KVO에 익숙하지 않거나 대출에서 차용자의 사진 이미지 속성에 이르는 주요 경로를 지정하는 방법에 익숙하지 않습니다. –

+0

코드 스케치가 추가되었습니다. – westsider

+0

그래, 그 코드로 작업 할 수있을 것 같아. 감사! 유일한 변화는 대출이 아니라 사진이있는 차용인이라는 것입니다. 따라서 대출자의 차용인의 이미지 속성을 관찰하기 위해 코드를 수정해야합니다. 이 경우 핵심 경로는 "이미지"대신 "차용자. 이미지"가됩니까? –

관련 문제