2015-09-21 5 views
5

मैं अपने स्टोरीबोर्ड में प्रारंभिक दृश्य नियंत्रक को खोलने के लिए एक अनजान सेगू का उपयोग कर रहा हूं। खोलना अच्छा काम करता है, मैं अपने प्रारंभिक दृश्य नियंत्रक में इस पद्धति लागू:आईओएस - मेरे प्रारंभिक दृश्य नियंत्रक को अनदेखा करें

Warning: Attempt to present on whose view is not in the window hierarchy!

:

- (IBAction) unwindToInitialViewController:(UIStoryboardSegue *) unwindSegue { 

} 
हालांकि

के बाद मैं खोलना मैं निम्न त्रुटि मिलता है अगर मैं एक और दृश्य नियंत्रक करने के लिए एक segue कोशिश ऐसा लगता है कि ऐसा तब होता है जब मैं दृश्य नियंत्रक से अनदेखा करता हूं जिसे स्टोरीबोर्ड में 'प्रारंभिक दृश्य नियंत्रक' के रूप में चेक किया जाता है। क्या यह एक बग है? क्या मुझे उस प्रारंभिक नियंत्रक को खोलने में सक्षम होना चाहिए? अन्य विचार?

संपादित करें:

[self performSegueWithIdentifier:@"mySegue" sender:nil]; 

मैं नोट करना चाहिए कि यह लॉगइन/लॉगआउट समस्या है:

यहाँ कैसे मैं दूसरे segue प्रदर्शन करते हैं। जब मैं पहली बार लॉग इन करता हूं तो मेरे लॉगिन नियंत्रक से मेरा अगला नियंत्रक काम करता है। जब मैं लॉगआउट करता हूं तो मैं प्रारंभिक दृश्य नियंत्रक से अनचाहे हूं। मैं फिर से लॉग इन करता हूं और मेरे लॉगिन नियंत्रक से अगले नियंत्रक तक segue काम नहीं करता है।

संपादित करें 2:

और अधिक शोध से मैं क्योंकि मैं अपने प्रवेश के लिए एक प्रतिनिधि का उपयोग कर रहा है अपने मिल गया है। लॉगिन एसिंक है, मैं AFNetworking के साथ एक कॉल करता हूं और जब यह किया जाता है तो मैं अपना लॉगिन प्रतिनिधि (इस मामले में लॉगिन वीसी) कहता हूं। उस समय लॉगिन वीसी दृश्य में segue कर सकते हैं।

लॉग इन कोड:

- (void) login: (NSDictionary *) parameters { 
    [http.manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, NSDictionary *response) { 
     [self.loginDelegate loginSuccess:response]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     [self.loginDelegate loginFailure:error]; 
    }]; 
} 

मेरा प्रवेश कुलपति जो प्रतिनिधि है:

- (void) loginSuccess:(NSDictionary *) response { 
    // setup user info based on response 
    ... 
    // Segue 
    [self performSegueWithIdentifier:@"loginSuccessSegue" sender:nil]; 
} 

मैं जाँच की है कि मैं मुख्य थ्रेड में हूँ जब मैं और segue और फिर भी प्रयास विफल। मुझे पता है कि AFNetworking हमेशा मुख्य धागे पर सफलता/विफलता ब्लॉक भी कहता है।

मुश्किल हिस्सा। यदि मैं उस उपरोक्त कोड को ब्लॉक का उपयोग करने के लिए बदलता हूं और प्रतिनिधि नहीं हूं तो स्टोरीबोर्ड/सेग्यू गड़बड़ नहीं होता है और मैं बिना किसी समस्या के लॉगिन और लॉगआउट कर सकता हूं।

सीगू प्रतिनिधि पैटर्न के साथ पहली बार क्यों काम करता है, लेकिन लॉगआउट (अनदेखा) पर, क्या मैं फिर से उस सेग का उपयोग नहीं कर सकता?

संपादित करें 3:

अधिक जांच से पता चलता है कि अपना लॉगिन पर तनाव मुक्त कुलपति viewDidAppear दो बार कहा जाता है। शुरुआती खोलने पर दृश्य अभी भी ढेर पर दिखता है, दिखाएं कि यह जल्दी से दिखाता है और देखेंडिडएपियर को बुलाया जाता है। हालांकि यह जल्दी से एनिमेटेड है और देखें VillAppear को एक अलग वीसी के साथ दूसरी बार कहा जाता है। मुझे लगता है कि यह समस्या की जड़ हो सकती है। जब मैं उस वीसी से अनजान हूं, तो क्या यह केवल एनिमेटेड होने के लिए एनिमेटेड है?

+0

आपका प्रारंभिक दृश्य नियंत्रक क्या है? इसके अलावा, आप दूसरी सीगू कैसे कर रहे हैं? – JDM

+0

ऐसा लगता है कि आप जल्द ही अगले नियंत्रक के लिए segue। – kirander

+0

@Jay मैंने जोड़ा कि मैं प्रोग्रामेटिक रूप से कैसे segue। – lostintranslation

उत्तर

1

कृपया जांचें कि क्या आपके loginDelegatenil दूसरे लॉगिन प्रयास के दौरान है। यदि यह nil है "प्रतिनिधि कॉल" अभी कहीं भी नहीं जाएंगे। कृपया यह भी जांचें कि आपके द्वारा अपेक्षित उदाहरण के लिए loginDelegate अंक हैं या नहीं।यदि यह "पुराने" उदाहरण को इंगित करता है, तो गलत विचार प्रस्तुत किए जाने की कोशिश की जा सकती है।

विधियों का सेट viewDidLoad, viewDidAppear, viewWillAppear इत्यादि अप्रत्याशित क्रम में कहा जा सकता है, खासकर जब नेविगेशन में वापस जाकर या विज्ञापन प्रस्तुत करना और उससे वापस आना। यदि आपके पास इन तरीकों के बीच वितरित विभिन्न प्रारंभिक/सेटअप कार्य हैं, तो आप आंशिक रूप से प्रारंभिक दृश्य नियंत्रक के साथ समाप्त हो सकते हैं।

(समस्या के बारे में सोच रही थी त्रुटि आई के बारे में मैं अपने बयान खो दिया है, इसलिए शायद प्रतिनिधि नहीं के बराबर नहीं है।)

संपादित करें:

मैं अपने छोटे खोलना परीक्षण परियोजनाओं में से एक भाग गया और वहाँ लॉग इन करें viewDidAppear कॉल:

viewDidAppear: <ViewController: 0x7a687700> 
viewDidAppear: <VC2: 0x7a70e970> 
viewDidAppear: <VC3: 0x7a694d50> 
unwind target 
viewDidAppear: <VC2: 0x7a70e970> 
viewDidAppear: <ViewController: 0x7a687700> 
viewDidAppear: <VC2: 0x7a71b790> 
viewDidAppear: <VC3: 0x7a694d20> 
unwind target 
viewDidAppear: <VC2: 0x7a71b790> 
viewDidAppear: <ViewController: 0x7a687700> 

खोलना कर में VC3 संक्षिप्त VC2 से पता चलता है और अंत में लक्ष्यपर समाप्त होता है। अब दूसरा "लॉगिन" दृश्य नियंत्रकों के विभिन्न उदाहरणों की ओर जाता है।

क्या आप "पुराने" दृश्य नियंत्रकों के संदर्भ रखते हैं?

एक और कारण यह हो सकता है कि आपका "लॉगआउट" पहचान दो बार आग लगती है (एक बार जब अनचाहे के साथ आती है और एक बार जब मध्यवर्ती या प्रारंभिक दृश्य नियंत्रक लॉगिन करने की आवश्यकता का पता लगाता है?)।

+0

यह शून्य नहीं है। प्रतिनिधि कॉल होता है। Segue जाने की कोशिश करता है और दृश्य प्रस्तुत नहीं कर सकता, इसलिए त्रुटि संदेश। – lostintranslation

+0

@lostintranslation मैंने उत्तर पोस्ट किया और तुरंत त्रुटि संदेश याद किया :-) मैंने जवाब अपडेट किया। –

+0

वही उदाहरण :(डीबगर में सत्यापित। – lostintranslation

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