ストーリーボードを使用し、KVC を使用してクラス間の結合を削減しようとしています。連絡先アプリと同様に、データを編集できる新しいビュー コントローラーをプッシュする編集可能なフィールドがあります。detailViewController の 1 つを表示する前に、次のようなことを行います。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ShowDetailMap"]) {
UIViewController *destination = ((UINavigationController *)segue.destinationViewController).topViewController;
if ([destination respondsToSelector:@selector(setMapTypeAsNum:)]) {
[destination setValue:[NSNumber numberWithInteger:self.mapView.mapType] forKey:@"mapTypeAsNum"];
[destination addObserver:self forKeyPath:@"mapTypeAsNum" options:NSKeyValueObservingOptionNew context:NULL];
}
Observer を削除して、クラス間の疎結合を維持するにはどうすればよいですか? viewController クラスを UINavigationControllerDelegate プロトコルに準拠させることはできますが、次のようなことを行うのは良くないようです。
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController respondsToSelector:@selector(setNewmap:)]) {
if ([[navigationController topViewController] isKindOfClass:[AddMapViewController class]]) {
// remove observer
}
}
}
DetailViewController が特定のタイプであるかどうかを確認し、そのView Controllerのオブザーバーを削除するよりも、Observerを削除するためのより良い方法があるはずです。何をお勧めしますか?ありがとう。