ios - 使用带有自定义键的 KVO

标签 ios objective-c

我很好奇,但是可以使用自定义键(和手动更改通知)实现 KVO 吗?

例如,我可以这样注册吗:

[myObject addObserver:self forKeyPath:@"My custom string" options:0 context:nil];

然后像这样发送更改通知:

[self willChangeValueForKey:@"My custom string"];
// do something
[self didChangeValueForKey:@"My custom string"];

我在一个小型测试应用程序中尝试过它并且它有效,但我很好奇是否有人使用过它或看到它的值(value)。

最佳答案

我同意如果键不对应于属性,则您不应该使用 KVO。但是,应该注意属性不需要实例变量甚至访问器。您可以完全使用符合键值编码的方法来实现动态属性。不过,此类属性只能使用 KVC 访问(例如 -valueForKey[Path]:-setValue:forKey[Path]:)。

例如,如果您实现 -valueForUndefinedKey:,您可以检查键,如果它与动态或虚拟属性的名称匹配(使用您想要的任何标准),您可以返回适当的值(value)。同样,如果您实现 -setValue:forUndefinedKey:,您可以使该属性可写。

对于这种情况,您不必发出手动 KVO 更改通知。当您调用 -setValue:forKey[Path]: 时,KVC 会自动发出这些信息。但是,如果您更改某些有效更改属性值的内部状态,则您必须自己发出更改通知。

关于ios - 使用带有自定义键的 KVO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23484355/

相关文章:

ios - NSURLSession().dataTaskWithRequest(...) 不能抛出?

objective-c - Objective-C 中应用程序的入口点

objective-c - swift 中的闭包可以用于两个类之间的通信吗?

ios - 将操作添加到已呈现的 UIAlertController

iphone - 自定义按钮的核心图形与图像

ios - 从 Windows 向 iOS 提供地理位置数据

ios - 水平居中 UIToolbar 中的所有项目,包括带有 UILabel 的自定义 View

ios - 如何? UISplitViewController TableCell 图像

ios - 带有日期字符串的 NSString 的时区是什么?

ios - 收到代码签名错误。它在我的本地机器上显示 "Provisioning profile could not be found"