2

我正在尝试从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

循环遍历所有视图控制器并检查视图控制器是否为[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 回答