10

जब मैं अपना तरीका अस्वीकार करता हूं तो मुझे यह त्रुटि मिल रही है। यहाँ विधि ठूंठ है:'एक व्यू कंट्रोलर पर पॉप करने का प्रयास किया जो मौजूद नहीं है।'

-(IBAction)dismissView 
{ 
    RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
    [self.navigationController popToViewController:rootController animated:YES]; 
} 

यही काम करना चाहिए, और मैं देख लिया है, rootController प्रारंभ और आवंटित किया जाता है। कोई विचार?

उत्तर

20

मैं इस समस्या को हाल ही में था और कुछ इस तरह से हल का उपयोग करके यह संकल्प लिया ...

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES]; 
+0

धन्यवाद, मेरे मामले पर काम करता है – tesmojones

+0

तेज 3 कार्यान्वयन 'जाने _ = self.navigationController .popToViewController ((self.navigationController .viewControllers [1]) के रूप में HomeViewController, एनिमेटेड:?! सच है)?' –

10

-popToViewController स्टैक के पॉप व्यू कंट्रोलर के लिए उपयोग किया जाता है, जो पहले से मौजूद है। आपके UINavigationController में व्यू कंट्रोलर का एक ढेर है (viewControllers प्रॉपर्टी में संग्रहीत), जब आप popToViewController, तो आप उस सरणी में से किसी एक तत्व को पहले तर्क के रूप में पास करना चाहते हैं।

क्या आप सबसे अधिक संभावना इस मामले में क्या करना चाहते हैं -popViewControllerAnimated: उपयोग करते हैं, ढेर

4

आप वहीं RootViewController आवंटन कर रहे हैं से शीर्ष ViewController निकाल देंगे जो है। यह नेविगेशन नियंत्रक के ढेर में मौजूद नहीं है, इसलिए कोई फर्क नहीं पड़ता कि आप कितनी दूर पॉप करते हैं, आप इसे नहीं पहुंच पाएंगे।

10

मैं pushViewController बल्कि popToViewController से

4

आप Storyboads उपयोग कर रहे हैं, इस segue का उपयोग करें:

#import "PopToControllerSegue.h" 

@implementation PopToControllerSegue 

- (void) perform 
{ 
    UIViewController *sourceViewController = (UIViewController *)self.sourceViewController; 
    UIViewController *destinationViewController = (UIViewController *)self.destinationViewController; 

    for (UIViewController* controller in sourceViewController.navigationController.viewControllers) { 
     if ([controller isKindOfClass:destinationViewController.class]) { 
      [sourceViewController.navigationController popToViewController:controller animated:YES]; 
      return; 
     } 
    } 

    NSLog(@"PopToControllerSegue has failed!"); 
} 

@end 
0

पुश सेग्स का उपयोग करते समय आप आसानी से इस विधि का उपयोग कर रूट पर वापस जा सकते हैं:

[self.navigationController popToRootViewControllerAnimated:YES]; 

(एक सामान्य संदर्भ शब्द प्रश्न में खारिज की वजह से और के रूप में) मॉडल segues का उपयोग कर आप इस पद्धति का उपयोग दृश्य नियंत्रक dismiss हो सकते हैं:

[self dismissViewControllerAnimated:YES completion:nil]; 
1

UINavigationController के एक ढेर है ViewControllers जो व्यू कंट्रोलर (एनएसएआरआरई) संपत्ति में संग्रहीत है। आवश्यक ViewController के लिए गणना करें और उस ViewController पर पॉप करें।

निम्नलिखित कोड समस्या को हल करना चाहिए।

-(IBAction)dismissView 
{ 
    NSArray *array = self.navigationController.viewControllers; 
    for (id controller in array) { 
     if ([controller isKindOfClass:[RootViewController class]]) { 
      [self.navigationController popToViewController:controller animated:YES]; 

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