2011-09-15 12 views
75

मैं इस संदेश के साथ NSInvalidArgumentException दिखा रहा एक क्रैश में आया जो पहले ऐसा नहीं कर रहा था।"एप्लिकेशन ने एक सक्रिय नियंत्रक को प्रस्तुत करने की कोशिश की"?

एप्लिकेशन ने एक सक्रिय नियंत्रक UITabBarController: 0x83d7f00 प्रस्तुत करने की कोशिश की।

मैं एक UITabBarController जो मैं AppDelegate में बना सकते हैं और यह UIViewControllers की सरणी देने की है।

उनमें से एक मैं उस पर टैप करते समय सामान्य रूप से प्रस्तुत करना चाहता हूं। मुझे लगता है कि प्रतिनिधि विधि

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

को लागू करने से उस दृश्य नियंत्रक एक मैं रीति से प्रस्तुत करना चाहते हैं के वर्ग का है द्वारा, मैं नहीं लौट सकते हैं और

[tabBarController presentModalViewController:viewController animated:YES]; 

करना और अब मैं हो रही किया यह त्रुटि, जिसका अर्थ यह है कि आप सामान्य रूप से एक दृश्य नियंत्रक प्रस्तुत नहीं कर सकते हैं जो कहीं और सक्रिय है (टैबबार में ...) मुझे कहना चाहिए कि मैं एक्सकोड 4.2 डेवलपर पूर्वावलोकन 7 पर हूं, इसलिए यह आईओएस 5 है (मैं एनडीए के बारे में जानता हूं, लेकिन मुझे लगता है कि मैं कोई वर्जित विवरण नहीं दे रहा हूं)। वर्तमान में आईओएस 4 एसडीके के खिलाफ संकलित होने पर परीक्षण करने के लिए मेरे पास एक्सकोड स्थापना नहीं है, लेकिन मुझे लगभग पूरी तरह से यकीन है कि यह नहीं है।

मैं केवल पूछने के लिए अगर किसी को भी इस मुद्दे का अनुभव किया है चाहता था या कोई सुझाव

+0

आईओएस 5 से पहले, इसने अपवाद नहीं उठाया, लेकिन कुछ भी नहीं लौटाया। आईओएस 5 से, यह आदेश एक अपवाद उठाता है। –

उत्तर

76

मान लें कि तीन दृश्य नियंत्रकों तो जैसे instantiated है है:

UIViewController* vc1 = [[UIViewController alloc] init]; 
UIViewController* vc2 = [[UIViewController alloc] init]; 
UIViewController* vc3 = [[UIViewController alloc] init]; 

आप उन्हें इस तरह की एक टैब बार में शामिल किया है :

:

UITabBarController* tabBarController = [[UITabBarController alloc] init]; 
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]]; 

अब आप इस तरह कुछ करने के लिए कोशिश कर रहे हैं

यह आपको एक त्रुटि देगा क्योंकि टैब बार नियंत्रक के पास आपके द्वारा दिए गए दृश्य नियंत्रक पर मृत्यु पकड़ है। आप या तो टैब बार पर दृश्य नियंत्रकों की सरणी में नहीं जोड़ सकते हैं, या आप इसे सामान्य रूप से प्रस्तुत नहीं कर सकते हैं।

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

+6

बात यह है कि आईओएस 5 से पहले कोई समस्या नहीं थी, इसलिए मेरी चिंता! मैंने जो किया वह टैबबार में एक डमी UIViewController जोड़ने और सामान्य रूप से वास्तविक दृश्य नियंत्रक subclass उदाहरण प्रस्तुत करना था। –

+0

@Iswank धन्यवाद। तुम मेरा समय बचाओ! – CReaTuS

+1

@Iswank, अब आईओएस 6 में, चीजों को "आसान" बनाने के लिए, उन्होंने वर्तमान मॉड्यूल व्यू कंट्रोलर को सभी प्रकार की घूर्णन समस्याओं का कारण बना दिया है ... आपको वर्तमान दृश्य नियंत्रक का उपयोग करने की आवश्यकता है: एनिमेटेड: पूरा करें और जांचें कि आपका ऐप परिवर्तनों को कैसे प्रबंधित कर रहा है – whyoz

0

बस

[tabBarController presentModalViewController:viewController animated:YES]; 

हटाने और

[self dismissModalViewControllerAnimated:YES]; 
+0

यह बहिष्कृत करता है चेतावनी ... तो इसका वैकल्पिक क्या है? –

+0

यहां मैंने उपयोग किया [ब्लॉक स्वयं खारिजव्यू नियंत्रकएनीकृत: हाँ पूर्णता: शून्य]; –

11

मैं एक ही समस्या है रहते हैं। मैं बस खारिज करने के बाद दृश्य नियंत्रक प्रस्तुत करने की कोशिश करता हूं।

[self dismissModalViewControllerAnimated:YES]; 

जब मैं एनीमेशन के बिना इसे करने की कोशिश करता हूं तो यह पूरी तरह से काम करता है इसलिए समस्या यह है कि नियंत्रक अभी भी जिंदा है। मुझे लगता है कि सबसे अच्छा समाधान dismissViewControllerAnimated:completion: का उपयोग आईओएस 5

+0

यदि आप इसे एनिमेटेड को खारिज करते हैं तो यह विफल हो जाता है क्योंकि जब तक आप मोडल व्यू कंट्रोलर को फिर से पेश करना चाहते हैं, तब भी यह एनिमेटेड होने पर स्क्रीन पर मॉड्यूलल है। – Pascal

+2

यह आईओएस 6.0 में चित्रित है –

2

मुझे एक ही समस्या थी। मैं इसे हल करता हूं।आप इस कोड को आजमा सकते हैं:

[tabBarController setSelectedIndex:1]; 
[self dismissModalViewControllerAnimated:YES]; 
संबंधित मुद्दे