检查导航堆栈上是否存在ViewController

Ser*_*yov 7 iphone cocoa-touch objective-c uinavigationcontroller ios

我在这里有这个代码来检查是否存在ViewController.不幸的是它不起作用.问题是,它是另一个VC弹出的时刻执行的Navigation Stack:

- (void) leftViewDidHide{
    if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]) {
    SGServerListViewController *sample = [[[((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]childViewControllers] objectAtIndex:0];
    [sample.serverTableView setUserInteractionEnabled:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序崩溃,异常断点将我指向带有if语句的行.关于这里可能出现什么问题的任何想法?我只是想检查它VC是否存在,如果是 - 执行代码.

小智 7

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

for (int i = 0 ; i <viewControlles.count; i++){ 
  if ([YourVC isKindOfClass:[viewControlles objectAtIndex:i]]) {
          //Execute your code
      }
}
Run Code Online (Sandbox Code Playgroud)


Dur*_*lli 5

 NSArray *controllerArray = [self.navigationController.viewControllers];
//will get all the controllers added to UINavigationController.

    for (id controller in controllerArray)
   { 
      // iterate through the array and check for your controller
      if ([controller isKindOfClass:[checkYourController class]]) 
          {
              //do your stuff here
          }
    }
Run Code Online (Sandbox Code Playgroud)

只是为了一个想法类的containsObject:方法NSArray也可以工作.


SAE*_*SAE 2

- (void) leftViewDidHide{

if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers count] == 1) {

         SGServerListViewController *sample = [[[((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]childViewControllers] objectAtIndex:0];
         [sample.serverTableView setUserInteractionEnabled:YES];

     }
 }
Run Code Online (Sandbox Code Playgroud)