2011-03-24 14 views
9

अग्रभूमि में प्रवेश करती है मैं viewDidAppear विधि हमेशा फायरिंग नहीं करने के लिए अपने iPhone ऐप्लिकेशन कोड में एक समस्या का पता लगाया है। जब आप ऐप शुरू करते हैं तो ईवेंट अपेक्षित रूप से आग लग जाता है। मैं एक फोन मल्टीटास्किंग में सक्षम का उपयोग करके एप्लिकेशन को बंद करने और में नहीं रह आग फिर से खोलना। मेरे viewDidAppear घटनाओं लेकिन अगर।viewDidAppear कभी भी फिर से फायरिंग नहीं करने पर ऐप

मेरे विचारों महत्वपूर्ण व्यक्ति से लोड किए गए हैं और मैं viewDidUnload का उपयोग ऊपर (जारी है और सभी आउटलेट्स शून्य) साफ करने के लिए। मेरे विचार पक्ष में घोंसला और टैब बार फिर नेविगेशन नियंत्रक हैं। मुझे लगता है कि एनबीएस रीलोड होने पर घटनाओं को ठीक तरह से तार नहीं दिया जाता है। मैं क्या गलत/लापता कर रहा हूं और मैं इसे कैसे ठीक कर सकता हूं पर कोई विचार?

अग्रिम धन्यवाद।

अद्यतन मेरा मतलब यह नहीं है कि ऐप पहली बार अग्रभूमि में आने पर ईवेंट को निकाल दिया नहीं जाता है। मेरा मतलब है कि घटना कभी फिर से आग लगती है। टैब के बीच बदलते समय या नेविगेशन दृश्यों के बावजूद चलते समय भी।

उदाहरण:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    NSLog(@"viewDidAppear called"); 
} 

इस कोड को दो बार देखा गया, भिन्न टैब पर प्रत्येक में रखा गया है। प्रत्येक बार जब मैं "viewDidAppear कॉल" टैब के बीच स्वैप करता हूं तो लॉग पर लिखा जाता है। जब मैं ऐप को बंद और दोबारा खोलता हूं और टैब के बीच स्वैप करता हूं तो यह अब नहीं होता है। अन्य बटन घटनाएं सामान्य रूप से आग लगती हैं।

+0

क्या अन्य एनएसएलॉग अभी भी दिख रहे हैं? मेरा मतलब है, यह सभी NSLogs का एक मुद्दा नहीं है जब आप पृष्ठभूमि और फिर से शुरू हो जाएंगे तो कुछ भी करने में असफल रहे? – occulus

+0

क्या आप UIViewControllers के संदर्भ में अपने यूआई सेटअप के साथ असामान्य या जटिल कुछ कर रहे हैं? क्या आप चीजों को घोंसले कर रहे हैं कि ऐप्पल घोंसला न करने की सिफारिश करता है, उदाहरण के लिए? – occulus

उत्तर

7

यह मिला।

प्रोग्रामिंग के लिए नया नहीं है, मैं आईफोन विकास के लिए नया हूं। इस समस्या को शोध पर मैंने पाया यह viewWillAppear और viewWillDisappear तरीकों मैन्युअल कॉल करने के लिए सिफारिश नहीं की गई थी।

मेरा viewWillDisappear विधियों को दिखाए जाने पर किसी भी कुंजीपटल को इस्तीफा दे दिया गया है, जब मेरा ऐप पृष्ठभूमि में प्रवेश करता है तो यह एक स्प्लैश स्क्रीन लोड करता है जब ऐप अग्रभूमि में प्रवेश करता है (कुछ तर्क है कि उपयोगकर्ता को यह पता लगाने के लिए क्या करना है ऐप को पुनरारंभ करने पर दिखाया गया है और मैं इसे स्प्लैश स्क्रीन के तहत कर सकता हूं)।

viewWillDisappear के रूप में नहीं बुलाया जाता है जब एप्लिकेशन सुनिश्चित करें कि कोई कीबोर्ड मेरी स्प्लैश स्क्रीन मैं applicationDidEnterBackground विधि में viewWillDisapper बुला रहा था दिखाई दी बनाने के लिए पृष्ठभूमि में चला जाता है। मुझे लगता है कि यह भी मेरी घटनाओं को पंजीकृत नहीं करता है।

viewWillAppear को applicationDidEnterForeground विधि में जोड़कर मेरी घटनाओं ने फिर से गोलीबारी शुरू कर दी। सबक सीखा, मैं इसे दोबारा कर दूंगा इसलिए मैं इन घटनाओं को मैन्युअल रूप से नहीं बुलाता हूं।

सहायता के लिए धन्यवाद।

+1

खुशी है कि आपने इसे हल किया है। आपको अपना उत्तर स्वीकार करना चाहिए - इसकी अनुमति है और आपको यह माना जाता है कि अगर आपको अपनी समस्या का उत्तर मिल जाए। – occulus

+1

मैं इस तरह के स्टंट करने पर इस धागे के समाधान की दृढ़ता से अनुशंसा करता हूं: http://stackoverflow.com/questions/15864364/viewdidappear-is-not-called-when-opening-app-from-background – Wirsing

10

Btw, viewDidUnload विधि वास्तव में बुरी तरह से btw नाम है - नहीं viewDidLoad करने के लिए एक 'विपरीत' यह है, यह केवल अगर वहाँ एक कम स्मृति स्थिति और कहा कि नियंत्रक के लिए विचार है कि पर दिखाई नहीं होने के कारण उतार दिया गया था कहा जाता है पहर।

(मूल, नहीं इसलिए प्रासंगिक उत्तर :)

कृपया इस समान सवाल का मेरा उत्तर देखें:

Why does viewWillAppear not get called when an app comes back from the background?

असल में, viewDidAppear के बाद अपने UIViewController के दृश्य को जोड़ा गया है कहा जाता हो जाता है आवेदन के UIWindow विरासत। तो backgrounding बहाल एप्लिकेशन तो viewDidAppear बुलाया नहीं प्राप्त करता है कि संबंध में आपके विचार नहीं बदलता है, - यह सही व्यवहार, और नहीं एक बग है। UIViewController के लिए API दस्तावेज़ देखें।

+0

:) इसे कभी भी बुलाया नहीं जाता है। यहां तक ​​कि जब मैं टैब, पुश और पॉप दृश्यों के बीच बदलता हूं। एक बार जब मैंने ऐप को कम और फिर से खोल दिया है तो इस घटना को फिर कभी नहीं निकाल दिया जाता है। – Magpie

+1

सुनिश्चित करें कि आपके सभी दृश्य नियंत्रक अपने दृश्य में [सुपर व्यूडिडएपियर] को कॉल कर रहे हैंडिडएपियर विधि या संदेश खो सकता है। –

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