【问题标题】:Key-Value-Observation -- Looking for a more elegant solution to respond to value changesKey-Value-Observation——寻找更优雅的解决方案来响应价值变化
【发布时间】:2012-02-27 23:29:01
【问题描述】:

我遇到了一个令人沮丧的 KVO 特性:所有通知都通过一个方法 (observeValueForKeyPath:....) 汇集,如果对象正在观察许多属性,则需要一堆 IF 语句。

理想的解决方案是将方法作为参数传递给首先建立观察的方法,但这似乎是不可能的。这个问题是否存在解决方案?我最初考虑使用keyPath 参数(addObserver:forKeyPath:options:context:)通过NSSelectorFromString 调用方法,但后来我遇到了KVO Dispatcher pattern with Method as context 的帖子和它链接的文章,它提供了不同的解决方案以便传递参数以及(虽然我还没有得到那个工作)。

我知道很多人都遇到过这个问题。是否出现了处理它的标准方法?

【问题讨论】:

  • 目前有多种不同的基于块的 KVO 实现,您可以通过简单的 google 找到。
  • github.com/ReactiveCocoa/ReactiveCocoa 是一种特别新颖的方法,可以让价值变化的观察变得不那么笨拙。

标签: iphone objective-c macos cocoa key-value-observing


【解决方案1】:

OP 询问:

出现了处理它的标准方法吗?

不,不是真的。有很多不同的方法。以下是一些:

我不能说我所看到的任何选项似乎都足以赢得“标准方式”的称号。我怀疑大多数有动力去克服这个问题的人只是选择一个并继续使用它,或者自己编写——这并不是说让 KVO 使用基于块的回调是火箭科学。为简单起见,您链接到的基于方法的方法似乎不是向前迈出的一步。我知道您正在尝试将基于字符串的键路径 方法转换的不确定性排除在等式之外,但是这种情况会下降,因为并非所有可观察的键/键路径都是方法。 (如果不出意外,您可以观察 NSMutableDictionaries 上的任意键并获取通知。)

如果 Apple 发布新的基于块的 KVO API 肯定会很好,但我并没有屏住呼吸。但与此同时,就像我说的那样,只需选择一个你喜欢的并使用它,或者自己编写并使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多