2013-07-13 5 views
23

के रूट व्यू कंट्रोलर को बदलना जब मेरा ऐप पहले लोड होता है, तो मैंने rootViewControllerUIWindow से controllerA की संपत्ति सेट की है।UIWindow

कभी-कभी मेरे ऐप के दौरान, मैं rootViewController को controllerB में बदलना चुनता हूं।

समस्या यह है कि कभी-कभी जब मैं controllerB में फ्लिप संक्रमण करता हूं, तो मुझे इसके पीछे controllerA का दृश्य दिखाई देता है। किसी कारण से दृश्य को हटाया नहीं जा रहा है। और भी चिंताजनक यह है कि rootViewController से controllerB, controllerA की dealloc विधि को कभी भी निकाल दिया नहीं जाता है।

मैं UIWindow की subviews को दूर करने की कोशिश की है मैन्युअल controllerB पर जाने के पहले, कि रों dealloc अभी भी कहा जाता हो जाता है कभी नहीं controllerA 'पृष्ठभूमि लेकिन controllerA में विचारों' को देखने का मुद्दा हल करती है। यहाँ क्या चल रहा है ????

सेब डॉक्स कहते हैं:

रूट दृश्य नियंत्रक विंडो की सामग्री दृश्य प्रदान करता है। इस प्रॉपर्टी पर व्यू कंट्रोलर असाइन करना (या तो प्रोग्रामेटिक रूप से या इंटरफ़ेस बिल्डर का उपयोग करना) दृश्य नियंत्रक के दृश्य को विंडो के सामग्री दृश्य के रूप में स्थापित करता है। यदि विंडो में मौजूदा दृश्य पदानुक्रम है, तो नए दृश्य स्थापित होने से पहले पुराने विचार हटा दिए जाते हैं।

अद्यतन

यहाँ मेरी AppDelegate का कोड है:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [self showControllerA]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void)showControllerA 
{ 
    ControllerA* a = [ControllerA new]; 
    self.window.rootViewController = a; 
} 

- (void) showControllerB { 
    ControllerB* b = [ControllerB new]; 
    self.window.rootViewController = b; 
} 
+0

क्या आप अपने ऐप प्रतिनिधि में विधि 'डीफिनिश लांचिंगविथऑप्शन:' विधि के लिए कोड प्रदान कर सकते हैं? – Cezar

+0

बेवकूफ सवाल, लेकिन क्या आप दूसरे नियंत्रक को दबाते समय 'नियंत्रक ए' को शून्य पर सेट करते हैं? यदि नहीं तो यह dealloc नहीं होगा। (मुझे लगता है कि आप हैं) – Putz1103

+0

मैं कभी भी नियंत्रक को पॉइंटर नहीं रखता हूं इसलिए सुनिश्चित नहीं है कि मैं शून्य पर क्या सेट करूंगा। – aloo

उत्तर

11

यह पता चला है कि दो अलग-अलग मुद्दे हैं। 1) मेरे पास कंट्रोलर ए में एक सतत चक्र था इसलिए इसे कभी भी हटा नहीं दिया गया था। दूसरा, रूट व्यू कंट्रोलर को बदलने के लिए आपको पहले विंडोज़ सबव्यूव्स को हटाना होगा (भले ही दस्तावेज़ अन्यथा सुझाव देते हैं)

1

समस्या ControllerA या ControllerB के अपने कार्यान्वयन में हो सकता है, वे 'स्वयं' कोड तो एआरसी में सुरक्षित रख सकते हैं स्वचालित रूप से आपको ViewController को हटा नहीं सकता है। क्या आप कंट्रोलर ए और कंट्रोलरबी कार्यान्वयन पोस्ट कर सकते हैं।

+0

के एक संघीय संस्करण के साथ प्रश्न अपडेट किया है जो बताएगा कि क्यों डेलोक को बुलाया जा रहा है। लेकिन नियंत्रक से दृश्य अभी भी नियंत्रक बी के पीछे दिखाई देगा क्यों। रूट व्यू कंट्रोलर को विंडो से नियंत्रक ए के विचारों को नहीं बदल रहा है? – aloo

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