2009-05-21 4 views
7

अद्यतनviewDidLoad बुलाया जाता है, viewWillAppear बुलाया नहीं होता है, दृश्य स्क्रीन

ऐसा नहीं है कि viewWillAppear और viewDidAppear डॉक्स प्रति बुलाया नहीं मिलता उल्लेख किया गया है पर प्रकट नहीं होता। हालांकि, मैं इन तरीकों के भीतर कोई प्रारंभिकता नहीं करता हूं और दृश्य में यूआई तत्व जोड़ता हूं।

मैं बस इसे डीबग करने का प्रयास करने के लिए ब्रेक पॉइंट्स रखने के लिए उनका उपयोग कर रहा था।

कोई अन्य विचार?


मूल प्रश्न

मैं स्टंप्डया हूँ। मैं कुछ कोड दोबारा कर रहा हूं और कुछ अजीब व्यवहार में आया हूं ....

मैं व्यू कंट्रोलर ए को बिना निब के शुरू करता हूं और प्रोग्राम को प्रोग्रामेटिक रूप से सेट करता हूं।

नियंत्रक में viewDidLoad ए को बुलाया जाता है।

दृश्य के अंदर दृश्य का दृश्य लोडर नियंत्रक ए, मैं एक निब से व्यू कंट्रोलर बी प्रारंभ करता हूं।

मैं viewControllerA.view

की एक subview

नियंत्रक के viewDidLoad बी कहा जाता हो जाता है के रूप में viewControllerB.view जोड़ें।


तो यह अजीब हो जाता है:

  1. viewWillAppear और की viewDidAppear ViewController बी कभी नहीं कहा जाता है मिलता है।

  2. viewControllerB.view कभी स्क्रीन पर बनाता है।

  3. कोई त्रुटियां।


चीजें मैं जाँच:

viewControllerBs नोक का नाम सही है।

viewControllerB का व्यू आउटलेट दृश्य से जुड़ा हुआ है।

viewControllerB और इसका दृश्य दोनों गैर-शून्य हैं।

और इसे ऊपर करने के लिए, एसडीके [redacted] बीटा 5 में सबकुछ बढ़िया काम करता है!

कोई विचार? दृश्य नियंत्रक कोड के माध्यम से एक दृश्य के पदानुक्रम में जोड़ा जाता है, तो यह .. कुछ मूर्खतापूर्ण हो गया है

+0

तो यह sdk3 पर काम करता है लेकिन पहले वाले पर नहीं? – EightyEight

+0

व्यूविल्लर रहस्य के बारे में रामिन के जवाब देखें। यह दस्तावेज़ों में है, लेकिन यह खोजना आसान नहीं है। निश्चित नहीं है कि क्यों ViewControllerB इसे स्क्रीन पर कभी नहीं बनाता है। क्या आप ViewWillApeear में कोई महत्वपूर्ण प्रारंभिक कार्य कर रहे हैं? – amattn

+0

+1 यहां प्रश्न पूछने से पहले चेक की गई चीज़ों की सूची के लिए +1 – stefanB

उत्तर

0

प्रयास करें मामले को बंद करने के लिए:

मैं एक समाधान कभी नहीं मिल सकता है, लेकिन उसके बाद से एसडीके 3.0 मानक है और बिंदु विवादास्पद बन गया है। कोड एसडीके के मौजूदा संस्करणों में सही ढंग से काम करता है।

19

, दृश्य नियंत्रक viewWillAppear (या viewDidAppear) संदेश नहीं मिलेगा।यदि आप इसे स्वयं जोड़ते हैं तो आपको दृश्य नियंत्रक को स्वयं संदेश भेजना होगा।

+2

धन्यवाद, जो मुझे समझने में मदद करता है कि व्यूविल्लएपर्स/डीएपीएपर्स क्यों नहीं बुलाए जा रहे हैं। हालांकि, समस्या –

1

-(void) viewDidAppear:(BOOL)animated { 
// whatever 
} 
+0

बनी हुई है जिसे देखने के बाद लोड किया जाता है .. –

3

[super viewWillAppear:animated]; 

कॉल करने के लिए जहाँ कहीं भी आप इसे फिर से परिभाषित मत भूलना।

प्रलेखन कहते हैं:

आप इस विधि को ओवरराइड, तो आप अपने कार्यान्वयन में कुछ बिंदु पर सुपर कॉल करना होगा।

+0

मैं एनवी नियंत्रकों/व्यू कंट्रोलर के साथ एक स्टोरीबोर्ड का उपयोग कर रहा हूं और देखेंडिड एपियर को नहीं कहा जा रहा था ... कारण मैंने टिप्पणी की थी [सुपर व्यूडिडएपियर: एनिमेटेड] मेरा कस्टम सबक्लास कि मेरे दृश्य नियंत्रकों में से एक विरासत में मिला है। रवींद्र! कोई विचार नहीं कि मैंने मूल रूप से ऐसा क्यों किया (मुझे लगता है कि दौड़ की स्थिति को हल करना है।) इस मुद्दे को हल करने से इस मुद्दे को हल किया गया है! याद दिलाने के लिए शुक्रिया! – taber

0

मुझे लगता है कि आपका विचार मूल दृश्य नहीं है। आप शायद एक UINavigationController का उपयोग कर रहे हैं ताकि इस विधि

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

या यह एक

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

लागू करने के लिए कोशिश करते हैं और अपने viewDidLoad में जोड़ने

this.navController.delegate = self; 

(UINavigationControllerDelegate जोड़ने के लिए भूल नहीं है आपके .h फ़ाइल में प्रोटोकॉल।