2013-07-30 6 views
12

मैं एक विरासत अनुप्रयोग पर काम करता हूं, और पता चला है कि मेरी view[Will/Did]Disappear विधियों को हमेशा ठीक से नहीं निकाल दिया जाता है।viewWillDisappear को कॉल करने पर कॉल नहीं किया जाता है popToRootViewControllerAnimated

मामला है, मेरे पास एक (कस्टम) UIViewController AppDelegate में rootViewController के रूप में सेट है। यह rootViewController में UINavigationController है, जिसमें दो दृश्य नियंत्रक हैं जो इस पर धक्का देते हैं। जब उपयोगकर्ता होम बटन दबाता है, तो उपयोगकर्ता लॉग आउट हो जाता है। वह बाद में एप्लिकेशन को लौटाता है, तो आवेदन [UINavigationController popToRootViewControllerAnimated:YES] कॉल और फिर में प्रवेश के लिए एक मॉडल UIViewController प्रदर्शित करता है

समस्या है:। जब मैं धक्का/UINavigationController पर पॉप सामान्य रूप से, मेरे viewWillDisappear विधि ठीक से कहा जाता है। लेकिन जब मैं popToRootViewControllerAnimated: विधि का उपयोग करता हूं, viewWillDisappear किसी भी दृश्य नियंत्रक पर पॉप नहीं किया जाता है जो पॉप-अप हो जाता है।

इन सुझावों में से कोई भी मेरे एप्लिकेशन में मामले हैं:

इंटरनेट पर सर्च कर रहे हैं केवल दो संभावित कारण दे दिया है। और मुझे नहीं पता कि कहां देखना है। किसी के पास सुझाव है कि ऐप में क्या गलत किया गया है?

+0

अच्छा खोजने :) दुबारा लिखा। धन्यवाद! – GoGreen

उत्तर

16

दृश्य शायद ऑनस्क्रीन नहीं था। इसे viewWillDisappear: विधि के लिए ऑनस्क्रीन (दृश्यमान) होना चाहिए। अगर यह पृष्ठभूमि से वापस आ रहा है, तो यह दिखाई नहीं दे रहा था।

आप willMoveToParentViewController: का उपयोग करने का प्रयास कर सकते हैं जिसे कॉल नियंत्रक को अपने माता-पिता से हटा दिया जाता है।

+0

यह एक बहुत ही रोचक सुझाव है! मैंने अब ऐप में किसी अन्य स्थान पर popToRootViewController का उपयोग करने का प्रयास किया है, और फिर मेरा विचार WillDisappear को अपेक्षित कहा जाता है, इसलिए आप अभी तक सही हैं। हालांकि, मैंने बिल्कुल अपने सेटअप के साथ एक टेस्ट ऐप बनाने का भी प्रयास किया, जहां 'popToRootViewControllerAnimated:' AppDelegate के 'applicationDidBecomeActive:' से कहा जाता है। यहां, 'व्यूविल डिस्प्लेयर:' विधि भी कहा जाता है। यह अभी भी सुझाव देता है कि इसे बुलाया जाना चाहिए, लेकिन मेरे ऐप में कुछ गलत है। – JRV

+1

ऐसा होने का कारण यह हुआ कि, जब मैं 'applicationDidBecomeActive:' विधि को कॉल किया गया था (केवल 'popToRootViewControllerAnimated:') को कॉल करने के बाद, मैं एक मोडल व्यू कंट्रोलर प्रस्तुत कर रहा था। तो आपका जवाब सही था - ऐप लॉन्च होने पर दृश्य स्पष्ट रूप से स्क्रीन से बाहर था। – JRV

+1

ऐप्पल के तकनीकी समर्थन के साथ इस मुद्दे को लाने के बाद, यह आईओएस में एक बग साबित हुआ (और यह 6 और 7 बीटा 5 दोनों में दिखाई देता है)। मैंने ऐप्पल को एक बग रिपोर्ट दायर की है। मैं आपको वर्कअराउंड के रूप में 'willMoveToParentViewController' का उपयोग करके अच्छे सुझाव के लिए +1 देता हूं :-) – JRV

0

इस तरह के उपयोगी मेरे लिए

[nav performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:0.0]; 

मैं UITabBarController

- (void)setSelectedIndex:(NSUInteger)selectedIndex { 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     UINavigationController *navigationController = [originalViewController as:[UINavigationController class]]; 
     if (navigationController.presentedViewController) { 
      [navigationController dismissViewControllerAnimated:NO completion:^{ 
       [navigationController popToRootViewControllerAnimated:NO]; 
      }]; 
     }else if (navigationController.topViewController){ 
      [navigationController popToRootViewControllerAnimated:NO]; 
     } 
    }); 

}

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

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