【发布时间】:2014-03-24 17:26:29
【问题描述】:
我的 NSManagedObject 中有一个依赖于其他实体的实体,因此在阅读了 Depend Keys 上的文档后,我在我的子类中提出了以下内容
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"assetAmount"]) {
NSArray *affectingKeys = @[@"assetAlternativeCur", @"assetAltCur", @"assetCurrency"];
keyPaths = [keyPaths setByAddingObjectsFromArray:affectingKeys];
}
return keyPaths;
}
- (void)setAssetAmount:(NSDecimalNumber *)assetAmount
{
[self willChangeValueForKey:@"assetAmount"];
if ([[self useAlternativeCur] boolValue] == YES) {
NSDecimalNumber *result;
result = [[self assetConversionRate] decimalNumberByMultiplyingBy:[self assetAlternativeCur]];
[self setPrimitiveAssetAmount:result];
} else {
[self setPrimitiveAssetAmount:assetAmount];
}
[self didChangeValueForKey:@"assetAmount"];
}
我的问题是设置器“setAssetAmount”只有在我直接更改“assetAmount”值时才会被调用,如果更改 keyPathsForValuesAffectingValueForKey 中包含的值,则设置器不会被调用。我会以错误的方式解决这个问题吗?我希望设置器在每次任何值更改时都会被调用。
【问题讨论】:
标签: cocoa core-data key-value-observing