我正在尝试使用 Storyboards 并使用 KVC 减少我的类之间的耦合。与联系人应用程序一样,我有可编辑的字段,可以推送新的视图控制器,您可以在其中编辑数据。在我展示我的一个 detailViewControllers 之前,我会做这样的事情
- (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 是否属于某种类型并删除该视图控制器的观察者。你会推荐什么?谢谢。