2010-12-06 5 views
4

MKMapViewの領域が変更されたときに知りたいオブジェクトがあります。ただし、このオブジェクトはマップビューのデリゲートではありません。しかし、observeValueForKeyPath:ofObject:change:context:が戻って呼び出されていないKVO経由でMKMapViewの領域を観察していますか?

[map addObserver:self forKeyPath:@"region" options:0 context:nil]; 

:私はmapがMKMapViewされた場合、次のことをしようとしています。

暫定的な解決策として、マップ領域が変更されたときにこの他のオブジェクトに知らせるマップのデリゲートを持っていますが、実際には関係のない2つのオブジェクトを連結解除したいと考えています。

答えて

9

フレームワークオブジェクトのプロパティは、ドキュメントに「」と表示されている場合にのみ、KVO準拠のであることが保証されています。 -[MKMapView region]のドキュメントはそのような主張をしていないので、KVOを使用しないでください。たとえそれが起こったとしても、完全なコンプライアンス、または継続的な成功を保証するものではありません。

代わりに、デリゲートメソッドを使用してそこから他のオブジェクトを通知する必要があります。可能であれば、代理人はNSNotificationをブロードキャストして、KVOと同様の効果を得ることができました。

+0

Mike Abdullahが言ったように、NSNotificationを使用するのはおそらくあなたが探しているものに最適なオプションです。それはあなたのオブジェクトを分離した状態に保ちます。 – afarnham

+0

KVOがうまくいかない。 'MKMapView'をサブクラス化していて、UIを更新するために地域変更通知を受け取る場合には非常に便利です – Eugene

関連する問題