2013-01-17 10 views
6

मेरे पास यह कोड ViewController के अस्तित्व की जांच के लिए है। और दुर्भाग्य से यह काम नहीं करता है। बात यह है कि यह एक और कुलपति के क्षण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]; 
    } 
} 

एक अपवाद ब्रेकपाइंट एक if बयान के साथ लाइन के लिए मुझे इशारा करते हुए के साथ ऐप्लिकेशन क्रैश। क्या गलत हो सकता है पर कोई विचार? मैं बस यह जांचने की कोशिश कर रहा हूं कि यह VC है और यदि यह है - कोड निष्पादित करें।

+0

आप हाल ही में नेविगेशन नियंत्रक करना चाहते हैं? – Durgaprasad

+1

त्रुटि संदेश क्या है? सीमा के बाहर? फिर ऑब्जेक्ट की जांच न करें, लेकिन संबंधित व्यू कंट्रोलर की संख्या के लिए। जैसे 'अगर (... viewcontrollers गिनती] == 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 

    } 
} 
संबंधित मुद्दे