0

私はたくさんの機能を処理し、またたくさんのナビゲーションを持っているアプリケーションを持っています。

アプリケーション内で多くのBOOLを使用しています。私はそれが効率的ではないことを知っています。したがって、これらのBOOLを削除して、より効率的でクリーンなアプリケーションを作成したいと思います。

これが私の質問です。例として、3つのUIViewControllerがあるとします。

Test1、Test2、Test3

Test1とTest2の両方のビューコントローラからTest3に移動する必要があります。また、Test1からTest3 View Controllerに移動する場合は、1つのメソッドを実行する必要があり、Test2からTest3に移動する場合は、別のメソッドを実行する必要があります。

現在私がしていることは、この問題を克服するためにGlobals.hクラスとGlobals.mクラスを使用しています。グローバルでBOOLを作成し、Test1でそのBOOL値を有効にし、Test3内でそのBOOL値を確認して、必要なメソッドを実行します。

これは単なる例です。私は、アプリケーションに対して多くのビューコントローラーと多くの動作を取得しました。そのため、グローバル内に多数のBOOLを作成し、それらをさまざまなクラスで使用しました。したがって、これは1つのアプリケーションで大量のboolを処理するのが面倒であり、それも良くありません。だから誰かがこの問題を克服する方法を私に助けてくれますか?

前もって感謝します :)

4

3 に答える 3

1

NSObjectメソッドisKindOfClassを使用してクラスを確認することもできます。

また、そのメソッドの説明で与えられた例を見つけることができます。

ここでは、オブジェクトがどの種類のクラスであるかを比較できるため、操作を実行できます。

そのため、毎回Controller3に自己参照を渡すことができ、 idタイプで保存できます。

これがあなたのコードに役立つことを願っています。

于 2012-05-21T16:12:38.390 に答える
1

ナビゲーションコントローラーのviewControllersプロパティを使用してみてください。

UINavigationControllerリファレンス

つまり、View Controllerが読み込まれると、View Controller配列を取得し、位置n-2(nは配列内の要素の数)にあるオブジェクトを確認する場所に基づいて、特定のアクションを実行する必要があります。 。次に、isKindOfClassメソッドを使用してそのオブジェクトのクラスのタイプをテストし、適切なアクションを実行します。

大まかな例:

-(void)viewDidLoad {

 [super viewDidLoad];

 NSArray *viewControllers = [[self navigationController] viewControllers];

 int parentIndex = [viewControllers count] - 2;
 UIViewController *parentVc = [viewControllers objectAtIndex:parentIndex];

 if ([parentVc isKindOfClass:ClassA.class]) {
  //action
 }
 else if ([parentVc isKindOfClass:ClassB.class]) {
  //different action
 }
 else ... etc

}

于 2012-05-21T16:17:53.460 に答える
1

@mrunalが言ったように、isKindOfClassを使用できます。いくつかのコードで私を理解しました。

// self is Test3

if ([self.presentingViewController isKindOfClass:[Test1ViewController class]]) {
    // Run your method for Test1 - Test 3 here.
}

モーダルをプッシュまたは提示する場合、presentingViewControllerはUINavigationControllerになるため、実際のviewControllerを取得する必要があります。これが私のやり方です。

// self is Test3

if ([self.presentingViewController.childViewControllers.lastObject isKindOfClass:[Test1ViewController class]]) {
    // Run your method for Test1 - Test 3 here.
}
于 2012-05-21T16:20:10.120 に答える