6

Ho questo codice qui per verificare l'esistenza dello ViewController. E sfortunatamente non funziona. Il fatto è, viene eseguito al momento di un altro VC popping dalla Navigation Stack:Verifica se esiste un ViewController su Stack di navigazione

- (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]; 
    } 
} 

Arresto anomalo dell'applicazione con un punto di interruzione un'eccezione mi indicando la linea con un if dichiarazione. Qualche idea su cosa potrebbe essere sbagliato qui? Sto solo cercando di verificare se questo VC è lì e se lo è - eseguire il codice.

+0

si vuole recente controller di navigazione? – Durgaprasad

+1

Qual è il messaggio di errore? Fuori dai limiti? Quindi non controllare per l'oggetto, ma per il numero di viewcontrollers associati. Per esempio. 'if (... viewcontrollers count == 1)' – SAE

+0

@SAE Giusto, si dice "fuori dai limiti". Rendilo una risposta in modo che io possa accettarlo. Ha funzionato! –

risposta

1
- (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]; 

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

for (int i = 0 ; i <viewControlles.count; i++){ 
    if ([YourVC isKindOfClass:[viewControlles objectAtIndex:i]]) { 
      //Execute your code 
     } 
} 
4
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 
      } 
    } 

solo per un metodo di containsObject: idea di NSArray classe potrebbe anche funzionare.

2
-(BOOL)isControllerAlreadyOnNavigationControllerStack{ 

    for (UIViewController *vc in self.navigationController.viewControllers) { 
     if ([vc isKindOfClass:Controller.class]) { 
      [self.navigationController popToViewController:vc animated:NO]; 
      return YES; 
     } 
    } 
    return NO; 
} 


if (![self isControllerAlreadyOnNavigationControllerStack]) { 
    //push controller 
} 
0

Si può fare (controllare se un ViewController Navigare Stack esiste) con questo codice:

if navigationController?.viewControllers.count > 1 { 
    for root in (self.navigationController?.viewControllers)! { 
     if root is ViewController { 
      let i = root as? ViewController 
      i?.table.removeFromSuperview() 
     } 
    } 
} 
self.navigationController?.popToRootViewControllerAnimated(true) 
0
NSArray *viewControlles = self.navigationController.viewControllers; 

for (int i = 0 ; i <viewControlles.count; i++){ 
    if ([[viewControlles objectAtIndex:i] isKindOfClass:[RequiredViewController class]]) { 

     //Enter your code 

    } 
}