6

Mam ten kod tutaj, aby sprawdzić istnienie ViewController. I niestety to nie działa. Chodzi o to, że jest wykonywany w momencie innego VC popping z Navigation Stack:Sprawdzanie, czy istnieje ViewController na stos nawigacyjny

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

Aplikacja ulega awarii z przewozem przerwania wyjątku wskazującego mnie do linii z oświadczeniem if. Wszelkie pomysły na to, co może być nie tak? Po prostu próbuję sprawdzić, czy ta VC istnieje, a jeśli tak - wykonaj kod.

+0

chcesz niedawnej kontroler nawigacyjny? – Durgaprasad

+1

Co to jest komunikat o błędzie? Poza granicami? Następnie nie zaznaczaj obiektu, ale liczbę powiązanych kontrolerów view. Na przykład. 'if (... viewcontrollers count == 1)' – SAE

+0

@SAE W prawo, mówi "poza granicami". Niech to będzie odpowiedź, więc mogę to zaakceptować. Zadziałało! –

Odpowiedz

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 
      } 
    } 

tylko pomysł containsObject: metoda NSArray klasy może również pracować.

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

Można to zrobić (sprawdzenie, czy ViewController na nawigacji Stos istnieje) z tym kodem:

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 

    } 
} 
Powiązane problemy