요청시 사용자 지정 속성이 계산되면 + keyPathsForValuesAffectingValueForKey :를 사용하여 장치가 변경 될 때 업데이트 알림을 트리거합니다.
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
if([key isEqualToString:@"MyCustomProperty"]) return [NSSet setWithObject:@"devices"];
return [super keyPathsForValuesAffectingValueForKey:key];
}
장치가 변경되었을 때만 계산을 수행하려면 KVO를 사용하여 변경된 경우 알림을받습니다.
//Put this in the various awake... methods
[self addObserver:self forKeyPath:@"devices" options:0 context:nil];
//Put this in the didTurnIntoFault method
[self removeObserver:self forKeyPath:@"devices"];
- (void)observeValueForKeyPath:(NSString *)path ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if(object == self && [path isEqualToString:@"devices"]) {
//Update custom property here
} else [super observeValueForKeyPath:path ofObject:object change:change context:context];
}
필자가 실제로해야할 필요가 있다는 것을 깨닫지 못했을 때 디바이스가 변경되거나 device.type이 변경 될 때마다 재 계산을 수행한다는 것은 컬렉션의 모든 디바이스에서 유형 속성을 관찰해야한다는 의미입니까? – grivescorbett
기본적으로 그렇습니다.하지만 NSArrayController를 사용하면 자동으로 수행 할 수 있습니다. 컨트롤러의 내용을 장치 키에 바인딩하고 컨트롤러의 arrangedObjects.type 경로를 관찰합니다. 당신이 원한다면 나는 이것을 내 게시물에 추가 할 수 있습니다. – ughoavgfhw
아래의 Martin Brugger의 회신을 참조하십시오. 저는 개인적으로 그의 솔루션을 시도했으며 지금까지는 최고였습니다. – strange