objective-c - KVO : how to call setValue. .. 在 setValue 内并且不会进入无限循环?

标签 objective-c macos cocoa key-value-observing kvc

我正在为 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/

相关文章:

c++ - 获取焦点应用程序的名称(在 Mac 上)

objective-c - 运行 NSUserUnixTask 时出现异常 `-[NSConcreteFileHandle readDataOfLength:]: Bad file descriptor`

objective-c - 即使 NSMenu 的 autoenablesItems 设置为 NO,NSMenuItem 的 setEnabled 也不起作用

objective-c - objective-c : AES 256 Encryption with NSData Key

c - 使用 SecItemImport 导入 PKCS12

objective-c - 使用 Objective-C 复制或移动文件的最佳方式?

iphone - 如何确定哪个 UIAlertView 调用了委托(delegate)。

ios - CSV 到 NSString 导致空空对象

objective-c - 为 NSOpenPanel 取消按钮设置自定义标题

cocoa - NSTableView NSCell 中的链接