ios - इसका क्या मतलब है? "'NSUnknownKeyException', कारण:... यह वर्ग कुंजी एक्स के लिए महत्वपूर्ण मूल्य कोडिंग-अनुरूप नहीं है"




macos cocoa (20)

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

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

अपने निब से:

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

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

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

मैं अपनी कक्षा में बनाए गए IBOutlet के साथ एक IBOutlet को जोड़ने की कोशिश कर रहा हूं।

मेरा आवेदन निम्न त्रुटि से क्रैश हो रहा है। इसका क्या मतलब है? मेरे द्वारा यह कैसे किया जा सकता है?

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


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

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

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

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

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

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

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


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

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

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];

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


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

अगर तुम

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

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

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

समाधान पुरानी संपत्ति को हटाना है।

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


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


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

नीचे दी गई छवि में कनेक्शन हटाएं।

बस सुनिश्चित करें कि आपके पास केवल तालिका दृश्य कक्ष के साथ कनेक्शन हैं। तालिका दृश्य कक्ष पर क्लिक करने के लिए और INSPECTOR में अपने कनेक्शन की तलाश करें।


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

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

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

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

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

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

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

आप एक वैकल्पिक इंट प्रॉपर्टी पर केवीसी का उपयोग नहीं कर सकते हैं, क्योंकि केवीसी कोको / ऑब्जेक्टिव-सी है, और ऑब्जेक्टिव-सी एक वैकल्पिक इंट नहीं देख सकता है - यह उद्देश्य-सी के लिए नहीं है। उद्देश्य-सी केवल उन प्रकारों को देख सकता है जो उद्देश्य-सी के लिए ब्रिज किए गए हैं:

एनएसओब्जेक्ट से प्राप्त कक्षा प्रकार

कक्षा प्रकार जो @objc के संपर्क में हैं

स्विफ्ट structs जो ब्रिज हैं


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

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


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

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

उम्मीद है कि यह कुछ के लिए काम करता है।


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


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


मेरे पास एक ही त्रुटि संदेश था और धन्यवाद (!!) किरा को http://www.idev101.com से मैं चुनौती को हल करने में सक्षम था। मैंने इन सभी धागे पर गुगलिंग और ढेर के बाद ही अपनी साइट पाई। अब मैं अगले के लिए यहां पोस्ट कर रहा हूं जो स्टैक ओवर फ्लो में आता है और मेरे पास एक ही चुनौती है क्योंकि उस व्यक्ति के पास 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];

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

  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 टैग के बीच कनेक्शन हैं;)


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

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

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

.1 कक्षा को UIViewController में बदलें

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

.3 सभी मानक चरणों को करें - ↑ ⌘K, व्युत्पन्न डेटा हटाएं (प्रार्थना नौकरियां, चिंता मोती)

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

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

.6 अपने आउटलेट दोबारा कनेक्ट करें।

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


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

लक्ष्य> सारांश> आईफोन / आईपॉड परिनियोजन जानकारी> मुख्य इंटरफेस

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


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


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


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

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

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

चीयर्स,


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

भले ही मैंने इस परियोजना से .xib फ़ाइल हटा दी है। उपयोगकर्ताओं को आईफोन / आईपैड में इस व्यू कंट्रोलर के लिए .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];
}






interface-builder