Xcode - 'NSUnognKeyException' को कैसे ठीक करें, कारण: ... यह वर्ग कुंजी X की त्रुटि के लिए महत्वपूर्ण मान कोडिंग-अनुरूप नहीं है?


1172

मैं अपनी कक्षा में निर्मित के UILabelसाथ लिंक करने का प्रयास कर रहा हूं IBOutlet

मेरा एप्लिकेशन निम्न त्रुटि के साथ क्रैश हो रहा है।

इसका क्या मतलब है?

मेरे द्वारा यह कैसे किया जा सकता है?

*** अनकहा अपवाद 'NSUnognKeyException' अपवाद के कारण समाप्ति ऐप, कारण: '[<UIViewController 0x6e36ae0> setValue: forUndefinedKey:]: यह वर्ग कुंजी XXX के लिए महत्वपूर्ण मान कोडिंग-अनुरूप नहीं है।'


11
पेड्रोटोरेस सही है। हाँ यह सही है। यदि आप एक UITableViewCell कर रहे हैं, तो IB में NSObject के लिए तेह फ़ाइल के स्वामी बनाने के लिए याद रखें, और आपके द्वारा परिभाषित .h वर्ग के लिए UITableViewCell'Class।
जिउसेपे

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

2
आपको ध्यान देना चाहिए कि त्रुटि संदेश में कुंजी का नाम (ओपी इसे 'XXXX' कह रहा है) वह नाम है जिसे आपने अपनी निब फ़ाइल में कुछ दिया था। अपनी खोज को कम करने में मदद करनी चाहिए।
क्रिश

मैंने rdar दायर किया: // 22105925 ने Apple को बिल्ड टाइम में इन त्रुटियों को अधिक स्पष्ट करने के लिए कहा। :)
jtbandes

वास्तव में समस्या का हल कैसे करें! stackoverflow.com/a/13812660/294884 शानदार टिप
फटी

जवाबों:


980

आपके दृश्य नियंत्रक में आपके xib में गलत वर्ग हो सकता है।

मैंने आपका प्रोजेक्ट डाउनलोड किया।

आपको जो त्रुटि मिल रही है, वह है

'NSUnognKeyException', कारण: '[<UIViewController 0x3927310> setValue: forUndefinedKey:]: यह वर्ग कुंजी स्ट्रिंग के लिए महत्वपूर्ण मान कोडिंग-अनुरूप नहीं है।'

यह Secondदृश्य नियंत्रक MainWindow.xibके UIViewControllerबजाय केSecondView एक वर्ग होने के कारण होता है । सही वर्ग में बदलने से समस्या हल हो जाती है।

वैसे, उद्देश्य-सी में "स्ट्रिंग" जैसे नामों का होना बुरा व्यवहार है। यह रनटाइम नामकरण टक्कर को आमंत्रित करता है। एक बार प्रैक्टिस एप्स में भी इनसे बचें। नामकरण टकराव को ट्रैक करने के लिए बहुत कठिन हो सकता है और आप समय बर्बाद नहीं करना चाहते हैं।

इस त्रुटि का एक अन्य संभावित कारण: जब एक नियंत्रक से दूसरे में तत्वों को कॉपी और पेस्ट करना, तो Xcode किसी तरह मूल नियंत्रक के लिए उस लिंक को रखता है, यहां तक ​​कि इस तत्व को नए नियंत्रक में संपादित करने और स्थानांतरित करने के बाद भी।

इस त्रुटि का एक अन्य संभावित कारण:

खराब आउटलेट।

आपने अपनी फ़ाइल में आउटलेट नाम हटा दिया है या उसका नाम बदल दिया है.h

इसे निकालें .xibया .storyboardफ़ाइल के इंस्पेक्टर इंस्पेक्टर के पास।

एक और संभावित कारण

(मेरे मामले में) बाइंड करने योग्य गुणों के साथ यूआईवीवाई का विस्तार और उन बाइंडेबल गुणों (यानी छाया, कोने की त्रिज्या आदि) के लिए मान सेट करें, फिर उन गुणों को यूआईवीवाई एक्सटेंशन (किसी कारण से) से हटा दें, लेकिन निम्नलिखित <userDefinedRuntimeAttributes>xml ( foo.storyboard) में बने रहे :

<userDefinedRuntimeAttributes>
  <userDefinedRuntimeAttribute type="color" keyPath="shadowColor">
      <color key="value" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
      <real key="value" value="50"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="point" keyPath="shadowOffset">
      <point key="value" x="5" y="5"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
      <real key="value" value="16"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="borderWidthValue">
      <real key="value" value="0.0"/>
  </userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>

समाधान: राइट-क्लिक करें foo.storyboard> सोर्स कोड के रूप में खोलें> की -पैथ (शैडोराडियस) द्वारा खोजें> </userDefinedRuntimeAttributes>समस्या को दूर करें


9
इसके अलावा nib के "दृश्य" आउटलेट को फ़ाइल स्वामी के व्यू आउटलेट (UIViewController से विरासत में मिली आपकी कस्टम क्लास का व्यू आउटलेट) से कनेक्ट करना न भूलें। यह "प्लेस होल्डर्स" के तहत "फाइल ओनर्स" से "ऑब्जेक्ट्स" के तहत "व्यू" और व्यू आउटलेट का चयन करके "ड्रैग कंट्रोल" द्वारा किया जा सकता है।
निरमा

1
मुझे यकीन है कि सभी वर्ग पहले से ही सेट हैं, लेकिन NSUnognKeyException अभी भी बाहर आती है :(
Zennichimaro

1
मैं इंटरफ़ेस बिल्डर का उपयोग भी नहीं कर रहा हूं, और मुझे अभी भी यह त्रुटि मिल रही है। किसी भी विचार क्या चल रहा है?
सूदो

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

5
@ जोश लोल। हर बार जब मैं एक्सकोड में एक मूल ऐप बनाने के लिए प्रेरणा का काम करता हूं, तो यह हमेशा मेरे साथ समाप्त होता है एक दिन बिताने की कोशिश करता है कि कैसे कुछ भी करूं। मैं एसी # देव हूं इसलिए मैं ज़ामरीन और टेलरिक (मूल निवासी) से प्रसाद देख रहा हूं।
मफिन मैन

1524

आपका अपने xib में खराब संबंध हो सकता है।

मुझे यह त्रुटि कई बार हुई है। जबकि इस मामले में TechZen का जवाब बिल्कुल सही है, एक और सामान्य कारण यह है कि जब आप अपने .h / .m में एक IBOut संपत्ति का नाम बदलते हैं जो आप पहले से ही फ़ाइल के मालिक को nib में कनेक्ट कर चुके हैं।

अपने निब से:

  1. आईबी में ऑब्जेक्ट का चयन करें और 'कनेक्शन इंस्पेक्टर' पर जाएं।
  2. 'रेफ़रिंग आउटलेट्स' के तहत यह सुनिश्चित करें कि आपकी वस्तु अभी भी पुरानी संपत्ति के नाम से जुड़ी नहीं है ... यदि ऐसा है, तो संदर्भ को हटाने और फिर से बनाने के लिए छोटे 'x' पर क्लिक करें।

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

एक और सामान्य कारण यदि आप स्टोरीबोर्ड का उपयोग कर रहे हैं, तो आपका यूआईबेटन अधिक हो सकता है तो एक असाइनमेंट (समाधान लगभग नीब के समान है):

  1. अपना स्टोरीबोर्ड खोलें और UIButton पर राइट क्लिक करें
  2. आप देखेंगे कि इस बटन पर एक से अधिक असाइन / रेफरी हैं। छोटी "x" वाली "मुख्य ..." ग्रेयर्ड विंडो में से एक निकालें:

    उदाहरण 2


1
धन्यवाद! मेरे मामले में मेरे पास एक ही दृश्य के लिए 2 आउटलेट थे, और पुराने से छुटकारा पाने और नए को देखने के लिए हुक अप करने से अपवाद समाप्त हो गया।
मार्क पैटरसन

मेरा दो बार नकल किया गया था। मैं प्रत्येक को डिस्कनेक्ट करने के बाद डिस्कनेक्ट करने लगा और प्रो संस्करण (एक लाइट संस्करण से) से यह सोचकर गिरा दिया कि यह दूसरे प्रोजेक्ट में कनेक्शन पर लटका हुआ है। जब मैं डुप्लिकेट भर में आया था, और वियोग बनाने के लिए 3 क्लिक किए गए थे, तो मैं ईमानदारी से चाहता था कि मैंने 3 दिन पहले किया। ओह अच्छा-ऐसा देव का जीवन है।
aremvee

मुझे यह समस्या थी कि यूबूटन एक से अधिक कार्य कर रहा था। इससे मेरी समस्या हल हो गई।
पौराणिक

मुझे यह समस्या भी हुई। केवल पर्यवेक्षण के बजाय विशेष दृश्यों में आउटलेट कनेक्शन की जांच करना न भूलें। मेरे मामले में, पर्यवेक्षकों को गलत कनेक्शन दिखाई नहीं दे रहे थे = /
अगस्तो कार्मो

मेरे पास एक समान त्रुटि थी जहां मैंने एक बटन आउटलेट को गलत ViewController स्विफ्ट फ़ाइल से कनेक्ट किया था जिसका पृष्ठ GUI का उपयोग करके अभी तक नहीं बनाया गया होगा
brw59

114

मुझे इस त्रुटि से छुटकारा पाने के लिए सिम्युलेटर / iPhone से ऐप को हटाना पड़ा।


1
+1 यह मेरे लिए तय है। मैं कुछ कोड को साफ कर रहा था जो आईबी का उपयोग करता था। जब मैंने कोड से एक बटन को हटा दिया, तो त्रुटि तब भी पॉप अप होती रही, जब इस बटन को निब फ़ाइलों में कम से कम संदर्भित नहीं किया गया था (कम से कम मैं देख सकता था)।
रविवार मोंडे

2
मुझे लगता है कि यदि आप एक ही नाम के लिए दो एप्लिकेशन डिबगिंग कर रहे हैं तो यह आवश्यक है।
एंटोन

हाँ, ऐसा लगता है कि XIB से कुछ सिम्युलेटर पर कैश किया गया है, जो एक दर्द है अगर आप उन्नयन का परीक्षण कर रहे हैं क्योंकि आप वास्तव में पुराने ऐप को हटाना नहीं चाहते हैं।
कार्लोस पी

मुझे अपनी XIB फ़ाइल हटाने में यह समस्या हुई। इससे समस्या ठीक हो गई।
बेल्बोआ नोव

4
यदि एप्लिकेशन हटाना काम नहीं करता है, तो XCode DerivedData फ़ोल्डर को हटाने का प्रयास करें। जो एक गलत फ़ाइल को कैश कर सकता है। ओपन XCode -> प्राथमिकताएं -> स्थान -> DerivedData फ़ोल्डर खोलें और इसे ट्रैश पर खींचें।
फिलिप फुंग

107

मुझे यह त्रुटि तब हुई जब मैं एक तालिका के लिए एक कस्टम व्यूसेल लागू करने का प्रयास कर रहा था। जब मैंने XIB के लिए व्यू कंट्रोलर को हाइलाइट किया और CellView में एलिमेंट्स से जुड़ा तो एरर का कारण बना "इस क्लास में की के लिए की-वैल्यू कोडिंग-कंप्लेंट नहीं है" एक बार जब मैंने इन्हें डिलीट कर दिया तो यह एरर डिलीट हो गई।

नीचे दी गई छवि में कनेक्शन हटाएं। जब फ़ाइल स्वामी हाइलाइट किया जाता है तो इंस्पेक्टर में कनेक्शन हटा दें

बस सुनिश्चित करें कि आपके पास केवल टेबल व्यू सेल के साथ कनेक्शन हैं। टेबल व्यू सेल पर क्लिक करने के लिए और अपने कनेक्शन के लिए INSPECTOR देखो।

जब टेबल व्यू सेल हाइलाइट किया जाता है तो कनेक्शन यहां होना चाहिए


4
यह मेरे लिए किया, बहुत बहुत धन्यवाद। मैं कनेक्शन को बाहर कर दूँगा जब "फ़ाइल का मालिक" बाएं कॉलम में चुना गया था, तब मेरे कस्टम सेल का चयन किया और उन्हें रिलेटेड किया। सफलता!
21

यहां तक ​​कि xcode7 के साथ यह काम करता है, बस सही पैनल "कनेक्शन इंस्पेक्टर" का उपयोग करें। टेबलव्यू से और लेबल से आउटलेट निकालें, फिर इसे जोड़ें और सब कुछ काम करना चाहिए।
जीवनकाल

3
यह काम करता है, लेकिन आपको यह सुनिश्चित करने की ज़रूरत है कि FileOwner सेट नहीं हुआ !! फ़ाइल स्वामी को NSObject रहना चाहिए। stackoverflow.com/questions/13793162/…
devjme

उसी उत्तर ने मुझे दो बार बचाया!
wm.p1us

98

कभी-कभी यह आपके "इनहेरिट फ्रॉम टार्गेट" के साथ करना पड़ता है। एकल लक्ष्य एप्लिकेशन के साथ आप लक्ष्य से इनहेरिट का चयन कर सकते हैं। यदि आपके पास अधिक है तो एक लक्ष्य वांछित लक्ष्य का चयन करें।

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


इस जवाब ने मुझे एक विशिष्ट मामले के लिए मदद की। मुझे कई लक्ष्य के साथ एक पुराने obj-c प्रोजेक्ट पर काम करना जारी रखना है। मैं स्विफ्ट में एक कस्टम UITableViewCell बनाता हूं और मेरी भी यही त्रुटि थी। "इनहेरिट फ्रॉम टार्गेट" को सक्षम करके इसने काम किया। धन्यवाद!
मगोहमोथ

मॉड्यूल हमेशा सही ढंग से सेट नहीं होता है; जैसे यदि आप वास्तव में कक्षा बनाने से पहले कक्षा का नाम भरते हैं।
जोहान

मैंने अंत में "एंटर" कुंजी दबाए बिना वर्ग का नाम भर दिया है, इसलिए आईडीई ने इस ध्वज को स्वचालित रूप से चेक नहीं किया है। इस पर 1 घंटा बर्बाद हुआ। धन्यवाद।
MatPag

Obj-c में इस प्रकार की त्रुटि का सामना कभी नहीं करना पड़ा। लेकिन इसके रहस्य को हल करने के लिए धन्यवाद।
प्रदीप कच्छवाहा

यह 3 पेज में क्यों दफन है?
सर्जियो

65

यदि यह केवल एक iPhone है, एक सार्वभौमिक नहीं है, तो सुनिश्चित करें कि निम्न फ़ील्ड खाली है:

लक्ष्य> सारांश> iPhone / iPod परिनियोजन जानकारी> मुख्य इंटरफ़ेस

यदि आप एक xib निर्दिष्ट करते हैं तो यह क्रैश हो जाता है।


2
हां, यह मेरे लिए था। एक नए स्टार्टअप व्यू कंट्रोलर को जोड़ने के लिए इधर-उधर करते हुए मैंने इसे नए वर्ग / nib पर सेट किया। देखने के आउटलेट को हुक करने के बाद मैं इस त्रुटि को मार रहा था। इस क्षेत्र को साफ़ करके इसे तय किया।
भयानक

इसने मेरे लिए काम किया। ध्यान दें कि मुझे काम करने के लिए डिवाइस / सिम्युलेटर से पुराने संस्करण को हटाना होगा।
20

धन्यवाद - यह मेरी समस्या थी। मैंने अपनी iPad स्टोरीबोर्ड फ़ाइल का नाम बदल दिया था और अपनी परियोजना के पूर्वावलोकन में अद्यतन नहीं किया था।
रॉबर्ट जोसेफ

2
धन्यवाद! इससे मेरे लिए हल हो गया। (मुझे खाली होने के लिए मुख्य इंटरफ़ेस फ़ील्ड को बदलने के बाद सिम्युलेटर से ऐप को हटाना पड़ा। बस उस क्षेत्र को बदलने से सिम्युलेटर को कैश को तोड़ने के लिए मजबूर नहीं किया गया।)
स्निप

मुझे याद आया कि मैंने एक सार्वभौमिक ऐप से केवल एक ऐप के लिए एक आईफ़ोन में चीजें बदल दीं और यह त्रुटि तय की!
जस्टिन

59

यह त्रुटि इंगित करती है कि पहले से कनेक्टेड इंटरफ़ेस बिल्डर ऑब्जेक्ट को उसके मालिक के स्रोत (फ़ाइल का स्वामी) में हटा दिया गया है / उसका नाम बदल दिया गया है।

इंटरफ़ेस बिल्डर में फ़ाइलें के स्वामी पर नियंत्रण-क्लिक करें यदि आपको एक विस्मयादिबोधक चिह्न दिखाई देता है जिसे आपको ठीक करने की आवश्यकता है।

नीचे दी गई तस्वीर में आप देख सकते हैं कि "aRemovedView" के दाईं ओर एक विस्मयादिबोधक चिह्न है, ऐसा इसलिए है क्योंकि मैंने IBOutlet व्यू ऑब्जेक्ट को हटा दिया था जबकि यह आईबी में पहले से ही जुड़ा हुआ था।

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

यह निम्न त्रुटि देता है: बिना किसी अपवाद के 'NSUnognKeyException' अपवाद के कारण ऐप समाप्त करना, कारण: '[setValue: forUndefinedKey:]: यह वर्ग कुंजी aRemovedView के लिए महत्वपूर्ण मान कोडिंग-अनुरूप नहीं है ।'


धन्यवाद! यह मेरे लिए तय है। मैं लंबे समय से इस मुद्दे पर रहा हूं और यह नहीं जानता कि इसे खरोंच से शुरू करने के अलावा कैसे ठीक किया जाए। यह वह था, जिसने व्यू कंट्रोलर से IBOutlets को हटा दिया था, लेकिन यह नहीं पता था कि वे अभी भी स्वामी में संदर्भित / लिंक किए गए थे (इस मामले में "इंटरफ़ेस बिल्डर में" व्यू कंट्रोलर "- Xcode 6)।
इरा हरमन

41

मुझे एक ही समस्या थी और जबकि टेकजेन का जवाब वास्तव में आश्चर्यजनक हो सकता है, मुझे अपनी स्थिति पर लागू करना मुश्किल लगा।

आखिरकार मैंने ऑब्जेक्ट के तहत सूचीबद्ध नियंत्रक के माध्यम से लेबल को लिंक करके समस्या को हल कर दिया (नीचे की छवि में हाइलाइट किया गया) बल्कि फ़ाइल स्वामी के माध्यम से ।

उम्मीद है की यह मदद करेगा।

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


37

मेरे मामले में यह स्टोरीबोर्ड स्रोत कोड में एक त्रुटि थी, इन चरणों का पालन करें:

  1. पहले सोर्स कोड के रूप में अपना स्टोरी बोर्ड खोलें
  2. निम्न को खोजें <connections>
  3. अवांछित कनेक्शन हटाएं

उदाहरण के लिए:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

जैसा कि आप देखते हैं, ये आपके कोड चर के नामों और स्टोरीबोर्ड लेआउट xml टैग के बीच संबंध हैं;)


33

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

मेरा फिक्स जेरार्ड ग्रुंडी के समान था। XIB का उपयोग करके कस्टम UITableViewCell बनाने में, मैंने गलती से UITableViewCell के बजाय फ़ाइल के स्वामी के लिए कस्टम क्लास नाम लागू कर दिया था। कैनवास पर UITableViewCell के लिए कक्षा को लागू करना और मेरे IBOutlet गुणों को जोड़ने से समस्या हल हो गई।


Ayyy dag nab it ... विश्वास नहीं कर सकता कि मैं कितनी बार यह गलती करता हूं। धन्यवाद lol
बेंजामिन

31
  1. आपको केवल IBOutletएक बार निर्दिष्ट करने की आवश्यकता है , IBOutletआपका आइवर लेबल अनावश्यक है।
  2. क्या आप अपने NIB का उपयोग करते हुए अपने इंस्टेंट का उपयोग कर रहे हैं UIViewController? कुछ बिंदु पर आपको कॉल करना चाहिए[SecondView initWithNibName:@"yourNibName" bundle:nil];

इससे मदद मिली! मुझे एक अलग दृश्य नियंत्रक से एक संपत्ति के बारे में कुंजी-मूल्य कोडिंग अनुपालन त्रुटि मिल रही थी। पता चला कि मैं -initWithNibNameगलत नीब नाम से बुला रहा था ।
jlstrecker

हाँ इससे मुझे भी मदद मिली .. मैं MyCustomeViewController के बजाय UIViewController का उपयोग कर रहा था .. लेकिन यह एक प्रकार का पदानुक्रम मुद्दा हो सकता है .. मिस ऑब्जेक्ट क्लास ऑब्जेक्ट की वजह से विफल रहा है .. धन्यवाद
रास्ते में

मेरा मुद्दा भी ऐसा ही था। दुर्घटना से दो समान आईबीएक्शन प्रविष्टियां। कोड में नहीं दिखा, केवल UIControl (मेरे मामले में एक UIStepper) के राइट-क्लिक में। बस एक को हटाकर इसे ठीक कर दिया।
डेव हबर्ड

30

यह मेरे साथ केवल एक डिवाइस (आईफोन) पर डिबगिंग के दौरान हो रहा था। IOS सिम्युलेटर ठीक काम कर रहा था। Xcode से एक "Product-> Clean" करने से समस्या का समाधान हो रहा था, लेकिन मुझे पता नहीं क्यों।


इससे मेरी समस्या हल हो गई। tsk2x सिरदर्द के लगभग 3 दिन।
user3818576

5
यह प्रश्न का उत्तर प्रदान करता है। निब में कुछ गड़बड़ हो गई और एक स्वच्छ समाधान कर रहा है। मैंने बिना किसी लाभ के उपरोक्त सभी को पढ़ा और कोशिश की और फिर साफ किया, और इसे ठीक करने के 1 घंटे के बाद, मेजर के समाधान ने इसे ठीक कर दिया। मुझे यह देखने में अच्छा लगा कि एक्सएमएल में इसका क्या कारण हो सकता है लेकिन मैं आगे बढ़ गया हूं।
लेविंसनोटेक्नोलाजीज

यह वास्तव में इस मुद्दे को हल करता है - मैंने ऊपर दिए गए कई सुझावों की कोशिश की और केवल परियोजना को इस त्रुटि को ठीक कर दिया कि अचानक होने लगी।
उग्ग

यह मेरी समस्या को ठीक करता है, मैंने ऊपर दिए गए सुझावों की बहुत कोशिश की। अजीब लगता है!
नवीन शान

23

मेरे पास सटीक त्रुटि संदेश और धन्यवाद था (!!) से Kira के लिए http://www.idev101.com मैं चुनौती को हल करने में सक्षम था। मैंने केवल इन सभी थ्रेड्स पर googling और स्टैकिंग के बाद उसकी साइट को पाया। अब मैं यहां अगले एक के लिए पोस्ट कर रहा हूं जो StackOverFlow के लिए आता है और मेरे पास एक ही चुनौती है क्योंकि वह व्यक्ति Google पर इस थ्रेड में आने की सबसे अधिक संभावना है।

मुझे एहसास हुआ, कि मैंने इसे गलत तरीके से बनाया है:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

इसके अलावा:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

कहाँ पे

DeviceViewController

क्या मेरी कक्षा का नाम भी था

DeviceViewController.h 
DeviceViewController.m

तुमको करना होगा

"import DeviceViewController.h"

अपने कार्यान्वयन (.m फ़ाइल) में जहाँ आप कॉल करना चाहते हैं जैसे कि एक और UIViewController।

मुझे पूरी तरह से खेद नहीं है अगर मैं केवल मेरे जैसे शुरुआती लोगों के लिए स्पष्ट कह रहा हूँ और नीचे वोट प्राप्त कर सकता हूं क्योंकि यह बिल्कुल सवाल से संबंधित नहीं है, लेकिन मैं इन त्रुटि संदेश के जवाब के लिए अब सीधे 4 (?) घंटे खोज रहा था। । अगर मैं इसे 1 या 2 लोगों के लिए छोड़ सकता हूं जो बहुत अच्छा होगा :)

पुनश्च: अन्य UIViewController लोड करने के लिए कोड कैसे जारी रहता है में रुचि रखने वालों के लिए:

    [self presentViewController:deviceViewController animated:YES completion:nil];

वहां सभी चरणों के लिए धन्यवाद, मैं Xcode 5 का उपयोग कर रहा था और वास्तव में नहीं जानता था कि मैन्युअल रूप से एक nib कैसे जोड़ा जाए क्योंकि आप केवल डिफ़ॉल्ट रूप से स्टोरीबोर्ड जोड़ सकते हैं .... मुझे कुछ निर्देश मिले लेकिन आपके अनुसार भी गैर-विस्तृत। वाकई मदद की !!
पिटफुल

"मैंने इसे गलत तरीके से बनाया ..." धन्यवाद, यह पहली बार नहीं है जब मैं इस बहुत बेवकूफ गलती की वजह से बहुत खर्च करता हूं
tontonCD

23

यह इस तथ्य से आ सकता है कि आपने खींचे गए नियंत्रण और एक आउटलेट या कार्रवाई बनाई है, और इसे हटाना भूल गए। यहां तक ​​कि अगर आपने कोड को हटा दिया है, या यहां तक ​​कि अगर आपने पर्याप्त cmd + Z बनाया है, तो आपको अपने स्टोरीबोर्ड के कनेक्शन निरीक्षक में जाना होगा और देखना होगा कि आपके द्वारा बनाई गई कार्रवाई या आउटलेट अभी भी यहां है या नहीं।


धन्यवाद! मैं Xcode पर एक n00b हूँ और मुझे बदमाश लिंक खोजने में थोड़ा समय लगा। Xcode 9.2 में, आप स्टोरीबोर्ड दृश्य में तत्व पर राइट क्लिक कर सकते हैं और "संदर्भ आउटलेट" की जांच कर सकते हैं।
कुनिगामी

21

अन्य उत्तरों को देखते हुए ऐसा लगता है कि बहुत सारी चीजें हैं जो इस त्रुटि का कारण बन सकती हैं। यहाँ एक और है।

अगर तुम

  • एक कस्टम दृश्य है
  • एक @IBInspectable संपत्ति जोड़ी
  • और फिर बाद में इसे हटा दिया

तब आपको भी इसी तरह की त्रुटि मिल सकती है

[(आपका कस्टम दृश्य]] पर निरीक्षण की गई संपत्ति को उपयोगकर्ता (xxx) निर्धारित करने में विफल ...: यह वर्ग कुंजी [xxx] के लिए महत्वपूर्ण मूल्य कोडिंग-अनुरूप नहीं है।

पुरानी संपत्ति को हटाने का उपाय है।

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

अपनी कक्षा के लिए पहचान निरीक्षक खोलें, उपयोगकर्ता परिभाषित रनटाइम विशेषताओं के तहत संपत्ति का नाम चुनें, और ऋण बटन दबाएं (-)।


मैं इस पृष्ठ पर इतनी बार आया ... इस बार इस समाधान ने इसे बनाया! लेकिन जितना अजीब लगता है कि पुरानी संपत्ति को हटाने के लिए वास्तव में एक और ViewController पर था वह दुर्घटनाग्रस्त होने की तुलना में है, मुझे पता नहीं क्यों।
Cinn

15

यह मेरे साथ तब होता है जब मेरे दृश्य नियंत्रक में मूल रूप से एक .xib फ़ाइल होती है, लेकिन अब इसे प्रोग्रामेटिक रूप से बनाया जाता है।

भले ही मैंने इस परियोजना से .xib फ़ाइल को हटा दिया है। उपयोगकर्ताओं के iPhone / iPad में इस दृश्य-नियंत्रक के लिए एक .xib फ़ाइलें हो सकती हैं।

एक .xib फ़ाइल को लोड करने का प्रयास आमतौर पर इस दुर्घटना का कारण बनता है:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'

प्रोग्राम बनाते समय समाधान यह हो सकता है:

-(void)loadView {
    // Ensure that we don't load an .xib file for this viewcontroller
    self.view = [UIView new];
}

12

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


मेरे मामले में ऐसा होने से मतदान हुआ था। मैं स्विफ्ट और स्टोरीबोर्ड का उपयोग कर रहा हूं। जब मैंने नया बिल्ड टारगेट बनाया (बिल्ड वेरिएंट बनाने के लिए) तो ऐप ने नए वेरिएंट में काम नहीं किया जबकि पहले वाले ने ठीक काम किया। एप्लिकेशन एक व्यू कंट्रोलर पर क्रैश हो गया जहां मॉड्यूल का नाम किसी तरह पहले लक्ष्य से मॉड्यूल पर सेट किया गया था, जबकि व्यू कंट्रोलर्स में काम करते समय यह वर्तमान - <मॉड्यूल का नाम> था । आपको इस मामले में मॉड्यूल का नाम मिटाना होगा।
मिक्साज़

11

मुझे एक ऐसी परियोजना की समस्या थी जिसके दो लक्ष्य हैं (अपने स्वयं के मेनविंडो XIB के साथ)। मेरे लिए यह त्रुटि उत्पन्न करने वाला मूलभूत मुद्दा यह था कि UIViewController वर्ग दूसरे प्रोजेक्ट की संसाधन सूची में शामिल नहीं था। Ie इंटरफ़ेस बिल्डर ने मुझे MainWindow.xib में इसे निर्दिष्ट करने की अनुमति दी, लेकिन रनटाइम पर सिस्टम क्लास का पता नहीं लगा सका।

Ie cmd प्रश्न में UIViewController वर्ग पर क्लिक करें और यह जांचें कि यह 'लक्ष्य' टैब में शामिल है।


9

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

मैं स्विफ्ट 2 में एक वेब सेवा कोडिंग पर काम कर रहा था। मैंने सभी आवश्यक प्रॉक्सी ऑब्जेक्ट और स्टब्स बनाए थे। जैसा कि मैंने लौटे XML के माध्यम से लूप किया था मैं गतिशील रूप से अपनी वस्तुओं को तात्कालिक कर रहा था, जो सभी उन पर आया NSObjectऔर उपयोग कर setValue:forKeyरहा था। हर बार setValue:forKeyएक संपत्ति सेट करने की कोशिश की, जो इस त्रुटि के साथ उड़ गई।

मैं प्रत्येक प्रकार मैं के साथ (जैसे काम कर रहा था के लिए एक स्विच बयान था Bool?, CShort?, String?) और प्रत्येक एक्सएमएल नोड मैं के माध्यम से चला गया और जाँच की किस प्रकार वस्तु पर था और फिर उस प्रकार के लिए मूल्य बदला है और साथ सेट करने का प्रयास किया के लिए setValue:forKey

आखिरकार मैंने इन सभी setValue:forKeyलाइनों पर टिप्पणी करना शुरू कर दिया और पाया कि मेरे defaultस्विच स्टेटमेंट केस ने काम किया String?

अंत में मुझे पता चला कि आप वैकल्पिक स्विफ्ट प्रकारों का उपयोग तब तक नहीं कर सकते हैंsetValue:forKey जब तक कि उनके पास ऑब्जेक्टिव-सी प्रकार की तरह प्रत्यक्ष मैपिंग न हो String?या NSNumber?। मैंने सभी CShort?प्रकारों को बदलना NSNumber?शुरू कर दिया है, जिसका सीधा मानचित्रण है। Bool?मेरे मामले में मेरे लिए यह ठीक था कि मैं इसका इस्तेमाल करूं Boolऔर इसे शुरू करूं false। दूसरों के पास वह विलासिता नहीं हो सकती है।

वैसे भी एक सिरदर्द जो इतनी उम्मीद से था, इससे किसी और को भी परेशानी होती है, जो इस तरह की समस्या से जूझता रहता है और इस सवाल पर पुनर्निर्देशित होता रहता है और खुद से कहता है, "मैं यूआई में कुछ नहीं कर रहा हूँ !!"

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

आप KVC को एक वैकल्पिक Int गुण पर उपयोग नहीं कर सकते, क्योंकि KVC Cocoa / Objective-C है, और Objective-C एक वैकल्पिक Int नहीं देख सकता है - यह Objective-C के लिए bridged नहीं है। ऑब्जेक्टिव-सी केवल उन्हीं प्रकारों को देख सकता है जो ऑब्जेक्टिव-सी के लिए ब्रिज किए गए हैं:

वर्ग प्रकार जो NSObject से प्राप्त होते हैं

वर्ग प्रकार जो @objc के साथ उजागर होते हैं

स्विफ्ट संरचना जो ब्रिज की जाती हैं


1
यदि आप कोको बाइंडिंग के माध्यम से एक स्विफ्ट बूल मूल्य कनेक्ट करने की कोशिश कर रहे हैं, तो आपको इसे @objc निर्देश के साथ उजागर करने की आवश्यकता है; अन्यथा आपको वास्तव में यह त्रुटि मिलती है। यह सबसे अच्छा जवाब होना चाहिए।
जवारेला

9

"यह वर्ग कुंजी के लिए महत्वपूर्ण मूल्य कोडिंग-अनुरूप नहीं है" मुझे इसकी थोड़ी देर पता है, लेकिन मेरा उत्तर अलग है इसलिए मुझे लगता है कि इसे पोस्ट करने की आवश्यकता है, मैं दूसरे नियंत्रक को गलत तरीके से धक्का दे रहा था, यहां नमूना है

गलत तरीके से पुश नियंत्रक

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

सही तरीका

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

मुझे ऊपर जैसा कोई उत्तर नहीं मिला, इसलिए हो सकता है कि यह किसी एक ही समस्या को सुलझाने में मदद कर सके


8

यह Xib इंटरफ़ेस से एक घटक को संदर्भित करने का मामला हो सकता है जिसे आपने नाम दिया है या हटाएं। मेरे लिए फिर से संदर्भित काम करता है।


8

मेरे पास अपनी डुप्लिकेटेड परियोजना में सिर्फ यही समस्या थी और 2 स्थानों की जाँच करके हल किया गया:

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

आशा है कि यह कुछ के लिए काम करता है।


7

एक और "मैं नहीं मानता" मुद्दा मुझे तब मिला जब मैं किसी कारण से एक कक्षा की दो प्रतियाँ लेने में कामयाब रहा।

मैं गलत कॉपी में चाबियाँ जोड़ रहा था। इंटरफ़ेस बिल्डर ने अभी भी चाबियाँ देखीं और मुझे उनके ऊपर हुक करने दिया, लेकिन रनटाइम में यह उस वर्ग की अन्य प्रतिलिपि का उपयोग कर रहा था जिसमें नई कुंजी नहीं थी।

यह पता लगाने के लिए कि कौन सी "सही" प्रतिलिपि थी, मैंने XCode के cmd-क्लिक का उपयोग वर्ग नाम पर कहीं और करके सही प्रति में कूद गया, फिर मैंने खराब अप्रयुक्त प्रतियों को मार डाला (पहले उपयोग की गई प्रतिलिपि से अपने संपादन को लाने के बाद)।

कहानी का नैतिक: डुप्लीकेट क्लास फाइलें खराब हैं।


7

यह त्रुटि कुछ और है!

यहाँ है कि मैं इसे कैसे तय किया। मैं xcode संस्करण 6.1.1 का उपयोग कर रहा हूं और स्विफ्ट का उपयोग कर रहा हूं। मुझे यह त्रुटि हर बार मिली जब मेरे ऐप ने अगली स्क्रीन पर कूदने के लिए एक सेगमेंट करने की कोशिश की। यहाँ मैंने क्या किया।

  1. जाँच की गई कि बटन सही क्रिया से जुड़ा था। (यह समस्या नहीं थी, लेकिन फिर भी जाँच करना अच्छा था)
  2. जांचें कि बटन में कोई अतिरिक्त क्रिया या आउटलेट नहीं है जो आपने गलती से बनाया हो। (यह समस्या नहीं थी, लेकिन फिर भी जाँच करना अच्छा था)
  3. लॉग की जाँच करें और सुनिश्चित करें कि NEXT SCREEN के सभी बटनों में सही क्रियाएं हैं, और यदि कोई भी तर्क हैं, तो सुनिश्चित करें कि उनके पास एक विशिष्ट पहचानकर्ता है। (यह समस्या थी)
    • एक सेगमेंट के पास एक विशिष्ट पहचानकर्ता नहीं था
    • बटन में से एक में एक एक्शन और दो आउटलेट थे जो मैंने गलती से बनाए थे।
    • किसी भी अतिरिक्त आउटलेट को हटा दें और सुनिश्चित करें कि आप अगली स्क्रीन के लिए अद्वितीय पहचानकर्ता हैं।

चीयर्स,


6

मेरा भी यही लक्षण था। मूल कारण यह था कि मेरी स्रोत फ़ाइल के लिए "लक्ष्य सदस्यता" सही लक्ष्य पर सेट नहीं थी। मुझे लगता है कि इसका मतलब है कि मेरी कक्षा मेरे ऐप में निर्मित और शामिल नहीं होगी।

इसे ठीक करने के लिए:

  1. अपनी .m फ़ाइल को हाइलाइट करें।
  2. दाएँ फलक में, फ़ाइल निरीक्षक का चयन करें।
  3. "लक्ष्य सदस्यता" अनुभाग के तहत, सुनिश्चित करें कि उपयुक्त बिल्ड लक्ष्य की जाँच की गई है।

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


6

यदि आपके पास IBOutlets के साथ एक कस्टम UIViewController उप-वर्ग है जो समस्याओं का कारण बन रहा है जो मुझे वास्तव में त्रुटि से छुटकारा पाने के लिए मिला था।

.1 वर्ग को UIViewController में बदलें

.2 सभी आउटलेटों को डिस्कनेक्ट करें (वे सभी अब पीले चेतावनी त्रिकोण होंगे) - यह सिर्फ समस्याग्रस्त आउटलेट (ओं) को डिस्कनेक्ट करने के लिए पर्याप्त हो सकता है।

.3 सभी मानक चरण करें - ⌘ standardK, डिलीट किया हुआ डेटा हटाएं (, प्रार्थना मैट, चिंता मोतियों)

.4 ऐप लॉन्च करें - समस्यात्मक दृश्य पर जाएं।

.5 ऐप को मारें, इंटरफ़ेस बिल्डर पर वापस जाएं कक्षा को अपने कस्टम वर्ग के नाम में बदल दें।

.6 अपने आउटलेट को फिर से कनेक्ट करें।

एप्लिकेशन लॉन्च करें और यह सामान्य रूप से कुंजी-मूल्य अनुपालन मुद्दों को साफ कर देगा।


स्टोरीबोर्ड संपादक में एक दृश्य को कॉपी और पेस्ट करते समय यह काम करता है।
मिज़मोर

5

मेरे मामले में। विलय के बाद मेरे पास xib-files में गुम आउटलेट नहीं थे।

शिफ्ट + कमांड + के

मेरी समस्या हल कर दी। मैंने अपने प्रोजेक्ट को साफ किया और पुनर्निर्माण किया।


4

मेरे मामले में, यह गलत नीब का संदर्भ देने के कारण हुआ था:

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];

1
मेरे पास तब आता है जब मैं दृश्य नियंत्रक का नाम बदल देता हूं और भूल जाता हूं कि निब नाम को भी बदलना होगा। चूंकि निब नाम सिर्फ एक स्ट्रिंग है, इसलिए कोई संकलक त्रुटि नहीं है।
क्रि।

3

मुझे यह त्रुटि स्टोरीबोर्ड के साथ मिल रही थी। उपरोक्त समाधान समस्या नहीं थी, इसलिए मैंने व्यू कंट्रोलर को हटा दिया और इसे फिर से वापस जोड़ दिया (और निश्चित रूप से फिर से जोड़ना और कक्षा को पुन: सौंपना) जिसने इसे ठीक किया। मुझे नहीं पता कि यह वास्तव में क्या था, लेकिन मैंने इसे शुरू करने से कुछ समय पहले ही संबंधित व्यू कंट्रोलर क्लास का नाम बदल दिया था, इसलिए शायद इसने कुछ किया था।


मुझे यह त्रुटि फिर से मिली। इस बार मैंने अपनी कक्षा के साथ एक नया खाली टेबल व्यू कंट्रोलर तैयार किया, जो गैर-काम करने वाले को अकेला छोड़ कर, और उस पर बहस को आगे बढ़ा दिया। यह काम किया। मैंने तब धीरे-धीरे दृश्य में हर तत्व की नकल की जब तक कि यह फिर से विफल नहीं हुआ। इस बार समस्या यह निकली कि मैंने एक पिकर के लिए कुछ "यूजर डिफाइंड रनटाइम अटेचमेंट्स" सौंपे थे (मैं सोच रहा था कि मैं पिकर को इनिशियलाइज़ करने के लिए इनका इस्तेमाल कर सकता हूं इसलिए मुझे यह कोड में नहीं करना होगा, अगर यह संभव हो तो कोई भी विचार नहीं है। )। उस समस्या को दूर करना। यह त्रुटि वास्तव में भयानक है, मुझे आशा है कि यह भविष्य के रिलीज में सुधार होगा!
सममितिक

3

मुझे भी यही समस्या हुई। मैंने सिम्युलेटर रीसेट कर दिया। बटन नियंत्रण को हटाना और जोड़ना। और अंत में एक साफ बनाया। :) अतिप्रवाह ढेर करने के लिए धन्यवाद। कुछ कैसे मेरा कोड ठीक हो गया और काम करना शुरू कर दिया।

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