स्टोरीबोर्ड में पहचानकर्ता के साथ एक दृश्य नियंत्रक नहीं होता है


175

मुझे निम्न त्रुटि मिलती रहती है:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

यह कोड है:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

मैंने पहले ही सेट कर identifierदिया है, UIStoryboardलेकिन मुझे अभी भी यह त्रुटि मिल रही है।

यहां छवि विवरण दर्ज करें



4
ऐसा लगता है जैसे आप किसी दृश्य नियंत्रक के पहचानकर्ता को सेट करते हैं, नहीं। उस चित्र में कौन सा दृश्य नियंत्रक आप प्रस्तुत करने का प्रयास कर रहे हैं? और आप सिर्फ एक सेग का उपयोग क्यों नहीं कर रहे हैं?
फिरोजा लेफ़र

अप करने के लिए ड्राइविंग दृश्य नियंत्रक अच्छी तरह से काम करता है .... जब मैं TableViewController प्रस्तुत करने की कोशिश करता हूं तो मुझे त्रुटि मिलती है ...... आप इसे कैसे करेंगे?
Mat

स्टोरीबोर्ड पर जाएं, उस स्टोरीबोर्ड आईडी को हटा दें, और फिर से जोड़ें। आपको कभी-कभी बिल्ड फ़ोल्डर और व्युत्पन्न डेटा को साफ करने की आवश्यकता होती है
onmyway133

जवाबों:


244

केवल भविष्य के संदर्भ के लिए:

मैं स्टोरीबोर्ड का उपयोग करके आईओएस 6 पर विकसित कर रहा हूं।

मेरे पास एक ही मुद्दा था, लेकिन मुझे निरीक्षक में "पहचानकर्ता" फ़ील्ड नहीं मिली। इसके बजाय, बस "स्टोरीबोर्ड आईडी" नाम का फ़ील्ड सेट करें जिसे आप पहचानकर्ता का नाम देंगे। यह फ़ील्ड इंस्पेक्टर में "आइडेंटिटी इंस्पेक्टर इंस्पेक्टर" टैब के तहत पाया जा सकता है।

[नोट - नीचे दी गई टिप्पणियों से संकेत मिलता है कि कुछ लोगों ने पाया है कि उन्हें इंस्पेक्टर में स्टोरीबोर्ड आईडी के ठीक नीचे "पुनर्स्थापना आईडी" फ़ील्ड (भी?) की आवश्यकता है। "स्टोरीबोर्ड आईडी का उपयोग करें" पर क्लिक करना पर्याप्त नहीं लगता है।]

संदर्भ के लिए नीचे एक छवि है: (इस उदाहरण में मैंने अपने पहचानकर्ता को अपनी कक्षा के समान नाम दिया है) यहां छवि विवरण दर्ज करें


24
पूर्व XCode 4.4 और पूर्व: पहचानकर्ता; XCode 4.5: स्टोरीबोर्ड आईडी
ilmiacs

आपकी जानकारी के लिए धन्यवाद। Google में स्पष्टीकरण के बाद स्टोरीबोर्ड में पहचानकर्ता को खोजने में मुझे परेशानी हुई, लेकिन मुझे Xcode4.6 में पहचानकर्ता नहीं मिला। यह नौसिखिया के लिए बड़ा मुद्दा है। धन्यवाद।
शुरुआती

4
मेरे लिए जो काम किया वह ReuseIndentifier का उपयोग कर रहा था। स्टोरीबोर्ड आईडी अभी भी एक शून्य सूचक अपवाद का कारण बनता है।
Droid क्रिस

वही मामला यहाँ @DroidChris
अहमद

5
"स्टोरीबोर्ड आईडी का उपयोग करें" के लिए जांच ने मुझे खुश कर दिया
पूर्वाह्न

189

में Xcode 7 - 11 ,

जब आप स्टोरीबोर्ड आईडी बदलते हैं और आपको इस तरह की त्रुटियां मिलती हैं,

बस अपनी परियोजना ( + + ) को साफ करेंCMDSHIFTK


13
मैं हमेशा ऐसा करने के लिए क्यों भूल जाता हूं? यह craziest की समस्याओं को ठीक करता है। धन्यवाद, टेड, मुझे याद दिलाने के लिए!
अल्फा कोडाएवेन

2
यह मुद्दा XCode 7.2 में हुआ था जब एक रेपो से खींच रहा था जिसमें स्टोरीबोर्ड में एक वीसी को एक पहचानकर्ता सौंपा गया था। परियोजना की सफाई से समस्या का समाधान हो रहा था।
एड जॉर्ज

2
मुझे लगता है कि मैं अपना दिमाग खो रहा था ... एक साधारण बहस काम नहीं कर रही थी, इसने चाल चली।
dokun1

2
हाँ इसका काम !!!! कुछ समय में xcode प्रोजेक्ट की सफाई से प्रोजेक्ट के अनचाहे संदर्भ दूर हो
जायेंगे

3
मैं एंड्रॉइड स्टूडियो और एंड्रॉइड डेवलपमेंट से आ रहा हूं। यह पागल है कि मुझे एक्सकोड और स्विफ्ट में कितने हैक का उपयोग करना है। मुझे सचमुच रोना है। गंभीरता से।
ktamas

43

फिक्स्ड! न केवल सेगमेंट में पहचानकर्ता को सेट किया जाना चाहिए, मेरे मामले में DrivingDetails, बल्कि मेरे tableViewController में आइडेंटिफायर को भी ड्राइविंगडेल के रूप में सेट किया जाना चाहिए ... मेरी तस्वीर देखें:

यहां छवि विवरण दर्ज करें

मैंने नेविगेशन व्यू कंट्रोलर को भी हटा दिया है, इसलिए अब 2 टेबल व्यू कंट्रोलर सीधे "पुश" एनीमेशन से जुड़े हैं।

***** XCODE 7.0 के लिए EDIT

आपको स्टोरीबोर्ड को सेट करना होगा (इस मामले में viewController एक नेविगेशन नियंत्रक में एम्बेडेड है:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

यहां छवि विवरण दर्ज करें


2
मैं इस प्रश्न के समान समस्या में चल रहा हूं, लेकिन जब मैं गुण निरीक्षक के पास जाता हूं तो मुझे 2 फ़ील्ड नहीं
दिखते हैं

क्या आपने उपर्युक्त उत्तर को देखा है? मुझे लगता है कि अधिक अद्यतन है। धन्यवाद
Mat

1
सेगमेंट के लिए पहचानकर्ता का इससे कोई लेना-देना नहीं है। व्यू कंट्रोलर के लिए केवल स्टोरीबोर्ड आईडी को स्टोरीबोर्ड में सेट करना होगा।
Jawwad

संभवतः संबंधित। IOS7 [storyboard instantiateViewControllerWithIdentifier]में इंटरफ़ेस बिल्डर से व्यू कंट्रोलर के अंदर के विचारों को तुरंत नहीं देखा जा सकता है; लेकिन iOS6 में यह किया
विलियम एंट्रीकेन

30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

ध्यान दें:

  • "StoryboardFileName"स्टोरीबोर्ड का फ़ाइल नाम है और स्टोरीबोर्ड की आईडी नहीं है!
  • "StoryboardID"वह आईडी है जिसे आपने मैन्युअल रूप से उस स्टोरीबोर्ड के लिए पहचान निरीक्षक में सेट किया है (नीचे स्क्रीनशॉट देखें)।

स्टोरीबोर्ड आईडी

कभी-कभी लोगों का मानना ​​है कि पहला स्टोरीबोर्ड आईडी है और दूसरा व्यू कंट्रोलर वर्ग का नाम है, इसलिए अंतर पर ध्यान दें।


1
यह!! मेरे आदमी तुम सिर्फ मेरे 18 घंटे के रहस्य को हल किया। संक्षिप्त विवरण के लिए धन्यवाद।
mrfevrier

1
ईसा मसीह! इसके लिए धन्यवाद! .instantiateViewController(withIdentifier: "StoryboardID")नाम बदला जाना चाहिए .instantiateStoryboard(withIdentifier: "StoryboardID")या बस कुछ सरलUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
रूजवेल्ट

16

आइडेंटिटी इंस्पेक्टर टैब में स्थित पहचान को Xcode 6.3.2 के लिए स्टोरीबोर्ड आईडी नामित किया गया और उपयोग स्टोरीबोर्ड आईडी विकल्प की जांच की गई। यहां छवि विवरण दर्ज करें


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

"स्टोरीबोर्ड आईडी का उपयोग करें" मेरे लिए महत्वपूर्ण टुकड़ा था। धन्यवाद।
मारसी

9

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


5

कंपाइलर निम्नलिखित त्रुटि दिखाता है:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

यहाँ बनाई गई स्टोरीबोर्ड की वस्तु मुख्य स्टोरीबोर्ड नहीं है जिसमें हमारे व्यूकंट्रोलर शामिल हैं। स्टोरीबोर्ड फ़ाइल के रूप में जिस पर हम काम करते हैं, उसे Main.storyboard नाम दिया गया है । इसलिए हमें Main.storyboard की वस्तु का संदर्भ रखना होगा

उसके लिए निम्नलिखित कोड का उपयोग करें:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

यहां storyboardWithNameउस स्टोरीबोर्ड फ़ाइल का नाम है, जिसके साथ हम काम कर रहे हैं और bundleउस बंडल को निर्दिष्ट करते हैं जिसमें हमारा स्टोरीबोर्ड है (यानी mainBundle)।


5

@Ravi Bhanushali के समान मुद्दे वाले लोगों के लिए, यहाँ एक स्विफ्ट 4 समाधान है:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)


यह @Ravi के उत्तर पर एक टिप्पणी जोड़ा जाना चाहिए।
सुनील

मैं होता है, लेकिन प्रतिष्ठा नहीं है। पर्याप्त प्रतिष्ठा वाला कोई व्यक्ति ऐसा करने के लिए स्वागत से अधिक है
confitz20

4

मुझे यह मिल गया ... स्टोरीबोर्ड में व्यू कंट्रोलर पर क्लिक करें, वीसी गुण निरीक्षकों पर बाईं ओर से तीसरे आइकन पर क्लिक करें - जिस पर आपने उस नाम पर कॉल नाम सेट किया है, वह कहता है 'पहचान' - मेरा छिपा हुआ था, मुझे करना था शब्द पहचान पर क्लिक करें और फिर स्टोरीबोर्डआईडी दिखाता है - कोड से आइडेंटिफ़ायर जोड़ें, किया


4

पहचान निरीक्षक में "स्टोरीबोर्ड आईडी" को संशोधित करना (बाईं ओर तीसरा आइकन) काम करना चाहिए।

यदि नहीं और आप सुनिश्चित हैं कि कोई टाइपो नहीं है, तो प्रोजेक्ट को साफ करने का प्रयास करें ("उत्पाद" -> "क्लीन", या बस कमांड + शिफ्ट + ए)।


मेरी ज़िंदगी बचाई। धन्यवाद। (विशेष रूप से सफाई के बारे में हिस्सा)
Jay

1

पहचानकर्ता में प्रवेश करते समय यू ने उचित दृश्य नियंत्रक का चयन नहीं किया है, बस एक बार जांच करें कि क्या प्रक्रिया को एक बार फिर से दोहराएं।


मुझे किस कंट्रोलर का चयन करना चाहिए? क्षमा करें, मैं भ्रमित हूँ।
Mat

TableViewController * नियंत्रक = [self.storyboard InstantiateViewControllerWithIdentifier: @ "DrivingDetails"]; कंट्रोलर। टाइटल = [[डाओ लाइब्रेरी इटेमआटइंडेक्स: इंडेक्सपैथ.रो] वैल्यूफ़ॉरके: @ "नाम"]; [self.navigationController pushViewController: नियंत्रक एनिमेटेड: हाँ]; इस तरह?
Mat

छवि के अनुसार TableViewController का चयन किया जाना चाहिए क्योंकि यू उस नियंत्रक में विवरण प्रदर्शित करने के लिए कर रहे हैं।
Iamsult


1
बस थोड़ा ध्यान दें कि आपका सेगमेंट आइडेंटिफ़ायर और व्यू कंट्रोलर आइडेंटिफ़ायर अलग-अलग हैं। मैं सिर्फ इस बात को उजागर करना चाहता था कि कुछ भ्रम था क्योंकि आप दोनों के लिए एक ही नाम का उपयोग कर रहे हैं। आपका सीग आइडेंटिफायर तैयारीफॉरग्यूग में उपयोग के लिए होना चाहिए और आपका व्यू कंट्रोलर आइडेंटिफायर सीधे आपके स्टोरीबोर्ड से विचारों को लोड करने के लिए है। scott-sherwood.com/?p=219
स्कॉट शेरवुड

1

मेरे कुछ दृश्य नियंत्रक स्टोरीबोर्डइंटेंटिफायर को याद कर रहे थे विशेषता ।

इससे पहले:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

उपरांत:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

0

मुझे एक ही त्रुटि मिली और मैं अपनी परियोजना में निम्नलिखित बदलाव करके इसे ठीक कर सकता हूं। मैंने निरीक्षक पैनल में अपने वर्ग के नाम का उल्लेख किया है फिर समस्या हल हो गई है। गोटो-> दायाँ पैनल वहाँ पहचान निरीक्षक कस्टम वर्ग अनुभाग में

वर्ग: आपका वर्ग नाम (ViewController)

पहचान अनुभाग में स्टोरीबोर्ड आईडी: आपकी स्टोरीबोर्ड आईडी (दृश्य नियंत्रक नाम)

इसके बाद वहां पर यूज स्टोरीबोर्ड आईडी विकल्प पर क्लिक करें। यह समस्या समाप्त हो गई है। मुझे आशा है कि यह आपकी मदद करेगा....


0

स्टोरीबोर्ड आईडी के रूप में अपने पहचानकर्ता (@ "ड्राइविंगडेल्स") का उपयोग करें।


0

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

यहाँ मेरा पहला स्वर स्टोरीबोर्ड है चलो vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") को! tabBarViewController


0

मैंने उपरोक्त सभी समाधानों की कोशिश की और कोई भी काम नहीं किया।

मैंने जो किया वह था:

  • प्रोजेक्ट क्लीन
  • व्युत्पन्न डेटा हटाएं
  • Xcode पुनरारंभ करें
  • पिछले उत्तरों (आईबी के अंदर) में दिखाए गए स्टोरीबोर्ड को फिर से दर्ज करें।

और फिर इसने काम किया। चौंकाने वाली बात यह थी कि मैंने इंटरफ़ेस बिल्डर में स्टोरीबोर आईडी दर्ज की थी और इसे फिर से Xcode खोलने के बाद हटा दिया गया / हटा दिया गया।

आशा है कि यह किसी की मदद करता है।


0

सभी चीजों को साफ करना और Xcode बंद करना मेरे लिए समस्या का हल नहीं है।

मुझे व्यू कंट्रोलर को हटाना पड़ा और नए पहचानकर्ता के साथ एक नया निर्माण करना पड़ा।


0

नोट: यदि आप अपने प्रोजेक्ट में कोकोपोड्स का उपयोग करते हैं, तो पहले चलाएं pod deintegrateऔरrm Podfile.lock

फिर VSCode जैसे किसी भी तीसरे पक्ष के कोड संपादक में अपना प्रोजेक्ट फ़ोल्डर खोलें और त्रुटि फेंकने वाले ViewController नाम के लिए एक वैश्विक खोज करें।

  1. किसी भी गलत नाम का नाम बदलें / ठीक करें जो आप पाते हैं।
  2. सभी परिवर्तनों को सहेजें।
  3. अपने प्रोजेक्ट को साफ करें और उसका निर्माण करें।

सब कुछ अब ठीक काम करना चाहिए।

यह सबसे अधिक बार तब होता है जब आप Xcode के भीतर से फाइलों का नाम बदल देते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.