我正在尝试使用Storyboard并使用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
}
}
}
似乎应该有一个更好的方法来删除Observer,而不是检查DetailViewController是否属于某种类型并删除该视图控制器的观察者。你会重新推荐什么?感谢。
答案 0 :(得分:0)
一种方法是让所有基类都有两种方法
使用这种方法可以最大化视图的解耦,因为如果类符合或不符合给定的观察结果,所有调用者都不必担心