2013-01-17 12 views
6

ViewControllerの存在を確認するためにここにこのコードがあります。残念ながら、それは動作しません。ことは、それがNavigation Stackから飛び出る別のVCの瞬間でを実行され、次のとおりです。if文で行に私を指して例外ブレークポイントとナビゲーションスタック上のViewControllerが存在するかどうかを調べる

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

アプリがクラッシュします。何がここで間違っているかもしれないかに関するアイデア?私はちょうどこのVCがあるかどうかをチェックしようとしています。もしそうなら、コードを実行してください。

+0

あなたは、最近のナビゲーションコントローラをしたいですか? – Durgaprasad

+1

エラーメッセージは何ですか?立入禁止で?次に、オブジェクトをチェックするのではなく、関連付けられたビューコントローラーの数を確認します。例えば。 'if(... viewcontrollers count)== 1)' – SAE

+0

@SAEそうです、「範囲外です」と言います。私はそれを受け入れることができるように答えてください。出来た! –

答えて

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

だけNSArrayクラスのアイデアcontainsObject:方法でもうまくいくかもしれないため。

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

あなたは、このコードで(ナビゲーションスタック上のViewControllerが存在するかどうかをチェックする)ことを行うことができます。

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 

    } 
} 
関連する問題