2012-06-11 16 views
18

मुझे पता है कि बहुत सारे प्रश्न हैं, लेकिन मुझे वह नहीं मिल रहा है जो विशेष रूप से इसे संबोधित करता है।self.navigationController क्यों दृश्य में शून्य है?

viewDidLoad में बुलाए जाने पर शून्य क्यों है, लेकिन बाहर viewDidLoad से कॉल करते समय सही है?

NavApp[31524:11003] (null) 
NavApp[31524:11003] <UINavigationController: 0x6e21190> 

मैं जानता हूँ कि इस के लिए कुछ सरल व्याख्या होनी चाहिए:

यह मैं एक विधि है कि NSLog(@"%@",self.navigationController); कॉल के साथ इंटरफेस के लिए एक बटन जोड़ने मेरी उत्पादन पहले NSLog(@"%@",self.navigationController); से viewDidLoad में कहा जाता है, पीछे नहीं है व्यवहार, मैं बस इतना उत्सुक हूं कि यह क्या है। धन्यवाद!

+0

क्या आप पहले [सुपर व्यूडिडलोड] को कॉल कर रहे हैं? – jrturton

+0

यहां एक समान प्रश्न है: http://stackoverflow.com/questions/7497183/problem-with-navigationcontroller। स्वीकार्य उत्तर माइक के नीचे जैसा ही है, लेकिन थोड़ा सा गहराई से है। – gtmtg

उत्तर

58

जब आप पहली बार उस नियंत्रक पर -view विधि/संपत्ति तक पहुंचते हैं तो एक व्यू कंट्रोलर का दृश्य लोड होता है। दृश्य लोड होने के बाद, viewDidLoad विधि कहा जाता है। यह बहुत सीधे आगे है। आपको यह भी याद रखना होगा कि दृश्य ऑफ-स्क्रीन होने पर स्मृति चेतावनियां प्राप्त होने पर दृश्य को कई बार लोड/अनलोड किया जा सकता है।

तो viewDidLoad का मतलब यह नहीं है कि आपका व्यू कंट्रोलर नेविगेशन नियंत्रक में डाला गया है। एक नेविगेशन नियंत्रक पर दृश्य नियंत्रक को धक्का देने की प्रक्रिया में, इसके view को एक्सेस और लोड किया जाएगा, लेकिन यह से पहले पूरे पुश को पूरा हो जाएगा। तो viewDidLoad को navigationController संपत्ति से पहले स्पष्ट रूप से कॉल किया जा रहा है।

आपको यह भी विचार करना होगा कि दृश्य नियंत्रक को नेविगेशन नियंत्रक पर भी धक्का देने से पहले आपके कोड का कुछ अन्य भाग दृश्य नियंत्रक के दृश्य तक पहुंच सकता है।

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

+3

हां, मैंने अपना कोड 'viewWillAppear: 'पर ले जाया है और यह ठीक काम करता है। मैं सिर्फ तर्क के रूप में उत्सुक था। आपकी पोस्ट ने इसे साफ़ कर दिया। धन्यवाद। –

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