2010-12-06 95 views
4

我有一個對象有興趣知道什麼時候MKMapView的區域發生了變化。但是,該對象不是地圖視圖的代表。我想以下,其中map是的MKMapView:通過KVO觀察MKMapView的區域?

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

然而,observeValueForKeyPath:ofObject:change:context:沒有被召回。

作爲一個臨時解決方案,我有地圖的委託讓這個其他對象知道地圖區域發生了什麼變化,但我想解耦這兩個對象,因爲它們並不真正相關。

回答

9

在Cocoa(Touch)中,框架對象的屬性只能保證符合KVO標準,如果文檔說明如此-[MKMapView region]的文檔沒有提出此類聲明,因此您不應該嘗試在其上使用KVO。即使它發生了工作,你也不能保證完全合規或持續成功。

相反,您必須使用委託方法並從那裏消息其他對象。可能您的代表可以廣播NSNotification以實現與KVO類似的效果。

+0

正如Mike Abdullah所說,使用NSNotification可能是您正在尋找的最佳選擇。這將保持你的對象解耦。 – afarnham 2011-01-06 04:31:14