Ios 用于组织UIViewController转换的设计模式

Ios 用于组织UIViewController转换的设计模式,ios,objective-c,design-patterns,Ios,Objective C,Design Patterns,我正试图想出一种很好的方法来组织UIViewController之间的转换,从而从控制器本身移除逻辑。我根据我喜欢的Pro ObjC设计模式书提出了一个模式,但我想知道如何改进它 简言之,这是一种模式。请原谅这个半伪代码 我对UINavigation控制器进行了子类化,并创建了一个方法,所有视图控制器在需要转换时都会调用该方法 -(void)requestViewChangeByObject:(id)object withData:(object*)someData{ if ([obj

我正试图想出一种很好的方法来组织UIViewController之间的转换,从而从控制器本身移除逻辑。我根据我喜欢的Pro ObjC设计模式书提出了一个模式,但我想知道如何改进它

简言之,这是一种模式。请原谅这个半伪代码

我对UINavigation控制器进行了子类化,并创建了一个方法,所有视图控制器在需要转换时都会调用该方法

-(void)requestViewChangeByObject:(id)object withData:(object*)someData{

    if ([object isKindOfClass:[ViewController1 class]]) {
        [self showViewController2Animated:YES withSomeData:nil];    
    }

    if ([object isKindOfClass:[ViewController2 class]]) {
        [self showViewController3Animated:YES withSomeData:someData];
    }

    if...
}
然后我为每个控制器定义了方法。有些只是实例化并推送控制器和一些设置属性或传递信息

-(void)showViewController2Animated:(BOOL)animated withSomeData:(object*)someDataVariable{

    viewController2 *VC2 = [viewController2 defaultViewController];
    [self pushViewController:VC2 animated:animated];
}

-(void)showViewController3Animated:(BOOL)animated withSomeData:(object*)someDataVariable{

    viewController3 *VC3 = [ViewController3 defaultViewController];
    VC3.someData = someDataVariable 
    [self pushViewController:VC3 animated:animated];
}
我这样做的原因是,随着设计和需求的变化,它使应用程序在改变控制器顺序和添加/删除控制器方面更加灵活。我们也倾向于重复使用应用程序,这使得重新构建和重组以构建新应用程序变得更容易

我遇到的主要问题是,应用程序越复杂,该方法就越大,所有if语句都会变大。如果请求来自viewController3,那么除了推送viewController2之外,还涉及更多的逻辑,这可能会让人感到困惑。我真的很想知道如何改进它,使它更灵活,更不容易引起混乱和错误

第二,当您将传递的数据添加到问题中时,它不是很灵活。最后,我取出了接受数据对象的参数,并创建了一个单独的singleton manager对象来处理保存/获取所需数据的操作,我知道这不是一个好的设计。然而,当我试着像Apple建议的那样在控制器之间来回传递数据(即在上面的代码中设置控制器的属性)时,情况变得一团糟,我觉得有更好的方法可以做到这一点


因此,如果您对此有任何建议,我们将不胜感激

为什么要重新发明轮子?这当然不是
UINavigationController
的预期用途。如果您正在研究这种简化应用程序逻辑的方法,那么最好重构应用程序。尝试和错误重构比依赖一个可能在事情开始变得棘手时导致你垮台的实现更可取。如果我是你,我会在我的控制器中有我的导航逻辑。甚至苹果的模板在
didSelectRowAtIndexPath
中也说“导航逻辑会在这里”。