2012-02-27 3 views
1

私はKVOの不満足な機能に遭遇しました。すべての通知は1つの方法(observeValueForKeyPath:....)オブジェクトが多数のプロパティを監視している場合Key-Value-Observation - 値の変化に対応するより洗練されたソリューションを探してください

理想的な解決方法は、最初に観察を確立する方法に引数としてメソッドを渡すことですが、これは不可能なようです。この問題には解決策がありますか?私は最初keyPath引数(addObserver:forKeyPath:options:context:)を使用してNSSelectorFromString経由でメソッドを呼び出すことを検討しましたが、投稿KVO Dispatcher pattern with Method as contextとそれにリンクされた記事は引数を渡すために別のソリューションを提供していますまだ働いている)。

私は多くの人々がこの問題に反対していることを知っています。それを扱う標準的な方法が出現しましたか?

+0

ブロックベースのKVOの実装は複数ありますが、単純なgoogleで見つけることができます。 –

+1

https://github.com/ReactiveCocoa/ReactiveCocoaは、価値観の変化をより鈍くするための特に斬新なアプローチです。 – ipmcc

答えて

1

OPが求められます。

が登場し、それを処理する標準的な方法を持っていますか?

いいえ、実際はありません。そこにはさまざまなアプローチがあります。ここではいくつかある:

私が見たことのあるオプションのどれもが "標準的な方法"というタイトルを獲得するのに十分に普及しているとは言えません。私は、この問題を克服しようと思っているほとんどの人がちょうど1つを選び、それについて行く、あるいは自分で書くことを考えている - ブロックベースのコールバックを使用するようにKVOを調整するのはロケット科学ではない。リンクしているメソッドベースのアプローチは、単純化のために前進しているようには見えません。私はあなたが文字列ベースのキーパス< - >メソッド変換の不確実性を取ろうとしているのですが、観測可能なキー/ keyPathsのすべてがメソッドではないので、その種のものが落ちます。 (もし何もなければ、NSMutableDictionariesの任意のキーを観察して通知を受け取ることができます)。

アップルが新しいブロックベースのKVO APIをリリースすればいいと思いますが、私は息を止めません。しかし、その間に、私が言ったように、ちょうどあなたが好きなものを選んで使うか、あなた自身のものを書いて使ってください。

関連する問題