2

からView Controllerのリストを確認しようとしていself.navigationController.viewControllersます。

NSMutableArray *arrayOfControllers = [[NSMutableArray alloc] initWithObjects:self.navigationController.viewControllers, nil];

例として、これは次のような配列を返します。

array -- (
        (
        "<HomeViewController: 0xb1aca10>",
        "<LeftMenuViewController: 0xe751520>"
    )
)

HomeViewController が配列に存在するかどうかを確認する必要があります。これを行うにはどうすればよいですか?

私はやろうとしまし[arrayOfControllers containsObject:[MESHomeViewController class]])たが、これはtrueを返しません。

4

4 に答える 4

7

すべてのView Controllerをループして、View Controllerが[MESHomeViewController class]. このメソッドを使用するために MESHomeViewController のインスタンスは必要ありません。

for (UIViewController *vc in arrayOfControllers) {
    if ([vc isKindOfClass:[MESHomeViewController class]]) {
        //It exists
    }
于 2013-09-26T21:30:55.347 に答える
1

containsObject検索するクラスのタイプだけでなく、特定のインスタンスを渡す必要があります。特定の MESHomeViewController への参照がある場合は、それをパラメータとして に渡しますcontainsObject:

于 2013-09-26T21:31:43.520 に答える
1
[arrayOfControllers containsObject:[MESHomeViewController class]]

コントローラーへのポインターがコントローラーのクラス名ではなく配列にあるため、機能しません。

あなたは簡単にできるはずです

[arrayOfControllers containsObject:self] // if inside MESHomeVIewController
[arrayOfControllers containsObject:myHomeViewController] //The instance of MESHomeViewController

編集:

チェックするクラスを割り当てたくない場合は、 isKindOfClass: チェックを使用するか、代わりに実際のインスタンスの代わりにクラス名で配列を作成できます

于 2013-09-26T21:32:33.547 に答える
0

ループを使用してテストできますisKindOfClass:

于 2013-09-26T21:30:39.290 に答える