我有Parent
一个自定义类的实体,该类具有一个名为DerivedProperty
.
的值DerivedProperty
取决于Parent.IndependentProperty1
_ IndependentProperty1
_ DerivedProperty
但是,与(称为)Parent
具有一对多关系,并且还依赖于所有对象中的值。Child
children
DerivedProperty
IndependentProperty2
Parent
Child
因此IndependentProperty1
,无论何时Parent
任何对象发生变化,我都想通知任何也发生变化的IndependentProperty2
观察者。Child
DerivedProperty
到目前为止,我已经到达了以下代码。唯一的问题是没有发出 KVO 通知,DerivedProperty
因为如果我尝试这样做,objectContextDidChange:
那么代码将结束在一个循环中。
- (void) awakeFromInsert
{
[super awakeFromInsert];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectContextDidChange:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.managedObjectContext];
}
- (void) awakeFromFetch
{
[super awakeFromFetch];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectContextDidChange:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.managedObjectContext];
}
- (void) objectContextDidChange: (NSNotification *) notification
{
NSSet *updatedObjects = [[notification userInfo] objectForKey:NSUpdatedObjectsKey];
if ([updatedObjects containsObject:self] || [updatedObjects intersectsSet:self.children])
{
//clear caches
_derivedProperty = nil;
}
}
- (void) didTurnIntoFault
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (NSString *) DerivedProperty
{
if (_derivedProperty == nil)
{
_derivedProperty = [self someExpensiveCalculation];
}
return _derivedProperty ;
}
我确信我需要重新考虑我在这里的方法。我已经尝试使用 KVO 来观察IndependentProperty1
和IndependentProperty2
多对多关系,但我似乎无法让它正常工作。如果派生属性不依赖于一对多关系,那么我确信我可以使用keyPathsForValuesAffectingValueForKey:
,但当然这不适用于一对多关系。
如何使用依赖于一对多关系的 Core Data 瞬态派生属性获取 KVO 通知?