0

我正在为 Mac OS X 编写一个程序,遇到了以下问题:

在我的一个类中,有许多布尔属性,可以使用 KVO 访问(即通过valueForKey:andsetValue:forKey:方法。它们的数量可能会增长。

每次我设置其中一个属性时,我都需要更改上次修改的日期,这也是一个属性。所以我最终不得不为每个新属性编写一个新的设置器。

我想做的是重写该方法,以便它设置相应的属性和最后一次修改的日期,但如果没有 a) 将s 添加到方法setValue:forKey:中,我无法弄清楚如何做到这一点(检查键名并设置对应的);b) 不会陷入无限循环。ifsetValue:forKey:_variable

有没有办法做到这一点?或者这完全是个坏主意?

4

1 回答 1

2

问题 a) 和 b) 都可以通过在重写的实现中调用 NSObject 超类的实现来解决:

- (void)setValue:(id)value forKey:(NSString *)key
{
    _lastModificationDate = [NSDate date];
    [super setValue:value forKey:key];
}

不会有无限循环,因为调用超类不会导致任何类型的递归。此外,无需显式调用您的设置器或设置您的实例变量,因为超类实现会处理此问题。

于 2013-09-14T19:22:45.353 回答