コントローラー自体からロジックを削除する UIViewControllers 間の遷移を整理する良い方法を考え出そうとしています。私が気に入った Pro ObjC Design Patterns の本に基づいてパターンを思いつきましたが、それを改善する方法を知りたいです。
ざっくりとパターン。半疑似コードはご容赦ください。
UINavigation Controller をサブクラス化し、すべての View Controller が遷移する必要があるときに呼び出すメソッドを作成しました。
-(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をプッシュするだけでなく、より多くのロジックが含まれていると混乱する可能性があります。より柔軟で、混乱やエラーを引き起こす可能性が低くなるように、これをどのように改善できるかを本当に知りたいです。
第 2 に、問題にデータの受け渡しを追加する場合、あまり柔軟ではありません。データオブジェクトを受け入れるパラメーターを取り出して、必要なデータの保存/取得を処理する別のシングルトンマネージャーオブジェクトを作成しましたが、これは良い設計ではないことを理解しています。ただし、Appleが提案するようにコントローラー間でデータをやり取りしようとすると(つまり、上記のコードのようにコントローラーにプロパティを設定する)、混乱した混乱になり、これを行うためのより良い方法があるように感じます。
したがって、これに関する提案は大歓迎です。