2012-11-24 32 views
51

के उदाहरण से प्रबंधित किया जाता है, इसलिए मैं 5 व्यू कंट्रोलर के साथ एक ऐप बना रहा हूं, पहला यूआईनेविगेशन नियंत्रक में एम्बेडेड है और बीच के बीच सेग पहले 4 व्यू कंट्रोलर ठीक काम करता है। हालांकि शुरू करने के लिए एक 5 वीं देखें नियंत्रक इस टूट गया है, और मैं त्रुटिNSGenericException ', कारण:' पुश सेग का उपयोग केवल तभी किया जा सकता है जब स्रोत नियंत्रक को UINavigationController

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.' 

मैं इस 5 वीं दृश्य नियंत्रक, इसकी सिर्फ एक छवि देख सकते हैं और एक लेबल के साथ एक मानक ViewController, और सभी के साथ कुछ अलग किया नहीं किया हो रही है स्टोरीबोर्ड में ctrl ड्रैगिंग बटन द्वारा मेरे segues को बुलाया जाता है। क्या किसी को यह पता है कि इसका क्या कारण है?

धन्यवाद

उत्तर

151

अपने प्रारंभिक दृश्य के लिए नेविगेशन नियंत्रक जोड़ने

  1. संपादक करने के लिए प्रारंभिक दृश्य
  2. जाएं चुनें ->एम्बेड में ->नेविगेशन नियंत्रक।
+9

आश्चर्य है कि यह सही उत्तर के रूप में क्यों नहीं चुना गया है? – dhaval

+9

शायद इसलिए क्योंकि ओपी स्पष्ट रूप से कहता है कि उसके पास पहले से ही उनके सभी व्यू कंट्रोलर हैं जो UINavigationController के भीतर एम्बेडेड हैं। मैं अपनी परियोजना में एक ही मुद्दे में चल रहा हूं। दृश्य नियंत्रक सबसे निश्चित रूप से एक UINavigationController के भीतर एम्बेडेड होते हैं जैसा कि नेविगेशन बार में '<पीछे' बटन द्वारा स्पष्ट है। – NathanAldenSr

+1

शानदार। सरल जवाब, मुझे बहुत समय बचाया और बाधा हल हो गई। +1 – voghDev

13

सेट स्टोरीबोर्ड में UINavigationController प्रारंभिक दृश्य नियंत्रक (प्रारंभिक दृश्य) के रूप में।

4

यह सबसे अधिक संभावना है क्योंकि बटन से आपके पुश सेग्यू या जो भी दृश्य नियंत्रक को इंगित कर रहा है वह आपके व्यू कंट्रोलर को नेविगेशन व्यू कंट्रोलर नहीं देता है। तो, आपको नेविगेशन नियंत्रक को segue इंगित करना होगा।

उम्मीद है कि इससे मदद मिलती है।

1

आपको अपने स्रोत व्यू कंट्रोलर में एक नेविगेशन कंट्रोलर एम्बेड करने की आवश्यकता है (एक प्रारंभिक दृश्य, न कि जिस दृश्य को आप दबा रहे हैं)। यह स्रोत दृश्य नियंत्रक का चयन करके और संपादक पर जाएं -> एम्बेड करें -> नेविगेशन नियंत्रक द्वारा किया जा सकता है।

यदि आपको लगता है कि नेविगेशन बार नेविगेशन नियंत्रक ने किया है। बस नेविगेशन कंट्रोलर का चयन करें, "विशेषताएँ निरीक्षक दिखाएं" में नेविगेशन बार को अक्षम करें।

0

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

0

मुझे इसे हल करने में कुछ मिनटों के बाद भी एक ही समस्या का सामना करना पड़ा।

मैंने सेग्यू कनेक्शन हटा दिए हैं और मैंने एक दृश्य से दूसरे दृश्यों में फिर से कनेक्शन किए हैं। यही समस्या हल हो गई है। बात यह है कि मैंने विचार हटा दिए हैं और मैंने कहानी बोर्ड दृश्य में विचारों में कुछ बदलाव किए हैं। और महत्वपूर्ण बात यह है कि आपको एक दृश्य से दूसरे दृश्य में ठीक से काम करने वाले कनेक्शन की जांच करने की आवश्यकता है।

यह कुछ एक मुझे आशा है कि करने के लिए सहायक हो सकता है ....

0

मैं एक ही समस्या का सामना करना पड़ा है और मैं एक बहुत खोज की, लेकिन कुछ भी नहीं मेरी मदद कर सकता है। मैंने कई तरीकों से कोशिश की। अंततः मुझे समाधान मिला। मैं एक्सकोड 5 में एक प्रोजेक्ट कर रहा हूं और स्टोरी बोर्ड का उपयोग करके विकसित विचार देख रहा हूं। मेरे पास 3 स्क्रीन हैं और मेरे कनेक्शन हैं ..

View1 view2 को -> धक्का

view2 view3 को -> धक्का

view2 View1 को -> मोडल (यह मेरी गलती है हम धक्का उपयोग करने के लिए केवल जरूरत है)

इस ठीक काम कर रहा है लेकिन मैंने बार 2 बटन (बैक) को व्यू 2 में रखा है और सीगू कनेक्शन मोडल था। जब मैं व्यू 2 बार बटन पर क्लिक करता हूं तो इसे ठीक से देखने के लिए रीडायरेक्ट किया जाता है लेकिन जब मैं view1 से आगे देखने की कोशिश करता हूं तो मुझे 2 में एक ही त्रुटि मिलती है। क्योंकि अगर आप गंतव्य दृश्य आपको स्रोत को देखने के लिए गंतव्य दृष्टि से एक ही धक्का segue उपयोग करने की आवश्यकता के लिए स्रोत दृश्य से धक्का segue प्रकार ..

मुझे आशा है कि यह

13

someone..thanks करने के लिए उपयोगी होगा देना मेरी उस समय जब मूल वीसी ने सीगू का प्रदर्शन किया था, नेविगेशन कंट्रोलर संक्रमण कर रहा था और पहले से ही वह वीसी दिखाई दे रहा था।

मैं ऐसा करके इसे हल:

if (self.navigationController.visibleViewController == self) { 
    [self performSegueWithIdentifier:@"thankyou" sender:self]; 
} 

कोई और अधिक दुर्घटना। :)

+1

यह काम करता है .. nsnotifications के माध्यम से segue ट्रिगर करते समय और अधिक उपयोगी। –

+0

महान उत्तर। अधिसूचना के माध्यम से ट्रिगर करते समय भी मेरी मदद की –

0

मुझे आपके जैसा ही समस्या थी।

मेरी समस्या यह थी कि मैं उस सीगू के पहचानकर्ता को बुला रहा था जो कक्षा के भीतर से पहुंच योग्य नहीं था जिसे मैं सेगू कह रहा था। मैंने इसे व्यू कंट्रोलर से सीधे एक और सीगू जोड़कर हल किया जिसकी कक्षा में मैं काम कर रहा था। उम्मीद है कि इससे मदद मिलती है।

0

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

कोई सीगू कॉन्फ़िगर करने योग्य नहीं था, और इस प्रकार कोई भी पुश इस त्रुटि में हुआ।

मेरा समाधान सरल था: [स्वयं showViewController: targetViewController प्रेषक: स्वयं];

0

अगर आप UIViewController वर्ग

उपयोग कर रहे हैं तो segue पहचानकर्ता की घोषणा उदाहरण के लिए, आप

पहचानकर्ता निर्धारित किया है में एक बात की जाँच करें: MySegue1 Segue: वर्तमान रीति से (इस चुनें यदि आप उपयोग कर रहे हैं UIViewController वर्ग)

प्रस्तुति: डिफ़ॉल्ट संक्रमण: डिफ़ॉल्ट

और एक और बात है कि अपने ओब जाँच जेक्ट मंदी सही है

शायद मेरा जवाब बिल्कुल सही नहीं है, लेकिन यह सब मुझे इस त्रुटि के बारे में पता होना है। उम्मीद है कि यह आपको थोड़ा सा मदद करेगा।