我正在为 Mac OS X 编写程序,遇到以下问题:
在我的一个类中,有许多 bool 属性,可以使用 KVO 访问这些属性(即通过 valueForKey:
和 setValue:forKey:
方法。它们的值数量可能会增加。
每次我设置这些属性之一时,我都需要更改上次修改的日期,这也是一个属性。所以我最终不得不为每个新属性编写一个新的 setter。
我想做的是覆盖 setValue:forKey:
方法,以便它设置相应的属性和上次修改的日期,但我不知道如何无需 a) 将 if
添加到 setValue:forKey:
方法(检查键的名称并设置相应的 _variable
) ; b) 不陷入无限循环。
有办法吗?或者这根本就是一个坏主意?
最佳答案
问题 a) 和 b) 都可以通过简单地在重写的实现中调用 NSObject 父类(super class)的实现来解决:
- (void)setValue:(id)value forKey:(NSString *)key
{
_lastModificationDate = [NSDate date];
[super setValue:value forKey:key];
}
不会出现无限循环,因为调用父类(super class)不会导致任何类型的递归。此外,无需显式调用 setter 或设置实例变量,因为父类(super class)实现将处理此问题。
关于objective-c - KVO : how to call setValue. .. 在 setValue 内并且不会进入无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18804996/