IBNSLayoutConstraint नाम की क्लास को तत्काल नहीं किया जा सका


81

मैं XCode6 बीटा का उपयोग कर रहा हूं और स्विफ्ट की कोशिश कर रहा हूं। जब मैं कुछ ऑटो लेआउट बाधाओं को एक व्यू कंट्रोलर में डालता हूं, तो एप्लिकेशन निम्न त्रुटि के साथ क्रैश हो जाता है: Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'


यहाँ रखने के लिए ज्यादा कोड नहीं है :) व्यू कंट्रोलर एक नियमित रूप से बनाया गया यूआईवाईवीकंट्रोलर है जिसमें कुछ आउटलेट्स और नियमित व्यूडीडलॉड और डीड्रेसिवेमरीवर्निंग हैं। और फिर इंटरफ़ेस बिल्डर में बाधाएं हैं। मुझे लगता है कि मैं यहां व्यू कंट्रोलर कोड जोड़ सकता हूं।
zbrox

जवाबों:


221

आपको यह त्रुटि इसलिए मिल रही है क्योंकि आपने एक IBOutlet में एक बाधा निर्धारित की है जिसे रनटाइम पर हटा दिया गया है। यह तब होता है जब आप इंटरफ़ेस बिल्डर में प्लेसहोल्डर होने के लिए बाधा निर्धारित करते हैं। चूंकि बाधा को हटा दिया जाता है, जब यह इसे अनारकली में जाता है, तो यह एक त्रुटि कहती है कि यह ऐसा नहीं कर सकता।

इसे सही करने के दो तरीके हैं।

विधि 1

  1. अपने स्टोरीबोर्ड पर राइट-क्लिक करें> ओपन अस> सोर्स कोड
  2. खोले गए स्टोरीबोर्ड xml में, खोजें placeholder="YES"
  3. आपको उन बाधाओं का पता चलेगा, जिन्हें रनटाइम पर हटाया जाना है। प्लेसहोल्डर विशेषता को बाधा से निकालें, सहेजें और बंद करें।
  4. ऐप चलाएं और आपकी समस्या ठीक होनी चाहिए।

विधि 2

  1. इंटरफ़ेस बिल्डर में आपकी समस्याओं के कारण बाधा का पता लगाएं। GUI में प्लेसहोल्डर विकल्प को अनचेक करें। यह उन बाधाओं में से एक होना चाहिए जो ViewController में एक IBOutlet पर सेट है जो आपके क्रैश का कारण बन रहा है।

प्लेसहोल्डर विकल्प की जाँच करने वाला इंटरफ़ेस बिल्डर विशेषता संपादक।

यह वही है जो यह दिखना चाहिए:

प्लेसहोल्डर विकल्प अनियंत्रित दिखा इंटरफ़ेस बिल्डर विशेषता संपादक।

विकल्प

यदि आप वास्तव में चाहते हैं कि बाधा एक प्लेसहोल्डर है, तो आपको किसी भी संदर्भित आउटलेट को हटाने की आवश्यकता होगी। ऐसा करने के लिए, उस बाधा का चयन करें जिसे आप प्लेसहोल्डर बनाना चाहते हैं। फिर कनेक्शन निरीक्षक खोलें (दाईं ओर बटन जो इस तरह दिखता है: (->)) और फिर उस बाधा पर मौजूद किसी भी संदर्भित आउटलेट को हटा दें।


1
क्या होगा यदि आप चाहते हैं कि बाधा एक प्लेसहोल्डर हो? डेवलपर
.apple.com/library/ios/documentation/UserExperience/…

2
@DanielGalasko यदि आप चाहते हैं कि यह एक प्लेसहोल्डर हो, तो इसे IBOutlet को असाइन न करें।
सैंडी चैपमैन

@ कैंडीचैनमैन जो समझ में आता है! बहुत बहुत धन्यवाद सैंडी, क्या आप इसे अपने उत्तर में शामिल कर सकते हैं ताकि मैं उत्थान कर सकूं?
डेनियल गैलास्को

1
@ डैनियलगोलास्को, ज़रूर बात। यह एक अच्छी बात है, मेरा जवाब यह धारणा बना रहा था कि आप एक IBOutlet पर बाधा चाहते थे।
सैंडी चैपमैन

@ कैंडीचेम्पैन: क्या यह पता लगाने का एक तरीका है कि यह कौन सी बाधा पैदा कर रहा है? मेरा प्रोजेक्ट बहुत बड़ा है, जो हर एक से गुजरने में सक्षम है और स्टैक डंप पिन को इंगित नहीं कर रहा है कि कौन सी बाधा है। इसके अलावा, मैंने प्लेसहोल्डर = "YES" देखने की कोशिश की, लेकिन xml में कोई भी नहीं मिला।
एम्ब्रोडर

6

मुझे अभी भी यही समस्या थी और निम्नलिखित ने मेरे लिए काम किया।

मैंने अपने ऐप के एक कार्यशील संस्करण को ऐप स्टोर में जारी किया, कुछ दिनों बाद फिर से इस पर काम करने के लिए वापस आया और UITabBarController में मेरे एक टैब पर टैप करके यह त्रुटि के साथ क्रैश हो गया:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'

मेरे पास कोई प्लेसहोल्डर लेआउट बाधा नहीं थी जिसे मैं या बाधा आउटलेट के बारे में पता था जिसे परिभाषित नहीं किया जाना चाहिए था।

मेरे लिए समाधान केवल आकार की कक्षाओं को बंद करना था और iPhone के लिए आकार वर्ग डेटा रखना था (App केवल iPhone के लिए है)। यह आकार वर्गों में मुझे याद किया कुछ भी हटा दिया जाना चाहिए। मुझे आकार की कक्षाएं चाहिए, इसलिए मैंने उन्हें वापस चालू कर दिया और ऐप ने फिर से काम किया।


आपके पोस्ट के लिए शुक्रिया! बस एक ही बात का अनुभव किया, मैंने अपने ऐप में कुछ भी नहीं बदला। मेरे मामले में यह 'UIPageViewController' लोड करने पर दुर्घटनाग्रस्त हो गया। आकार की कक्षाओं को बंद करने और उन्हें फिर से सक्षम करने से त्रुटि हल हो गई।
x

धन्यवाद!! न के बराबर अनुभव। यहां समाधान खोजने के लिए बहुत अजीब, लेकिन बहुत ही अद्भुत।
एंडी वाइंस्टीन

4

यह जरूरी एक बाधा समस्या नहीं हो सकती है। मेरे लिए यह मेरे लेआउट पर लागू होने वाले आकार वर्ग के लिए "इंस्टॉल" की जाँच नहीं होने के कारण हुआ था, यहाँ देखेंइंस्टॉल की जाँच होनी चाहिए


1

आकार की कक्षाओं का उपयोग करने में कुछ समस्या थी। मैंने स्टोरीबोर्ड गुणों से उस विकल्प को अक्षम कर दिया और केवल ऑटो लेआउट का उपयोग किया। यह इतनी बड़ी समस्या नहीं थी क्योंकि ऐप केवल आईफोन है।


"आकार वर्ग" को अक्षम करना और इसे मेरे लिए भी ठीक करना। मैंने तब आकार वर्गों को फिर से सक्षम किया, और यह काम करता रहा।
जॉन फाउलर

1

मेरे साथ जो हो रहा था, वह यह था कि मैंने इंटरफ़ेस बिल्डर के अंदर एक सबव्यू काटकर इसे दूसरे एक्सिब में कॉपी किया। इसने मूल xib इंटरफ़ेस बिल्डर में सबव्यू छोड़ दिया जिसके साथ इसे बाहर निकाला जा रहा है। सबव्यू को मूल स्थान से हटाने के बाद (चयन और हटाकर)। मैं त्रुटि से छुटकारा पाने में सक्षम था।


0

इंस्पेक्टर विंडो में एक विकल्प होता है जब आप xib फाइल का चयन करते हैं जो इंस्पेक्टर में "शो फाइल इंस्पेक्टर" के तहत कांस्टिंस का उपयोग नहीं करेगा जिसे "ऑटोलॉयआउट का उपयोग करें" कहा जाता है।


मुझे उस एक का पता है, लेकिन मैं उस स्टोरीबोर्ड के लिए ऑटोलेयूट का उपयोग करना चाहता हूं।
zbrox


धन्यवाद। मैंने उन लोगों के साथ खेलने की कोशिश की लेकिन यह वास्तव में मदद नहीं करता था क्योंकि मैं आकार की कक्षाओं का उपयोग कर रहा था। लेकिन मैं इसके माध्यम से पढ़ूंगा और देखूंगा कि क्या मुझे कुछ याद आया। एक बार फिर धन्यवाद।
zbrox

0

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

     delaysContentTouches="NO" canCancelContentTouches="NO"

लेकिन इसके अलावा, मैंने अपने स्टोरीबोर्ड में एक और दृश्य में निम्नलिखित नए टुकड़े को देखा:

                    <variation key="default">
                        <mask key="subviews">
                            <exclude reference="86H-aM-wei"/>
                        </mask>
                    </variation>

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


0

जब मैं एक कस्टम UICollectionViewCell में एक बटन था, तो मेरे पास यह मुद्दा था, और उस वर्ग पर IBOutlets के रूप में इसके कुछ अवरोध थे। मैंने सेल से बटन को पैरेंट व्यू कंट्रोलर में स्थानांतरित कर दिया और IBOutlets को अभी भी सेल में संदर्भित किया गया था, लेकिन वास्तव में सेल पर मौजूद नहीं था इसलिए सब कुछ उड़ा दिया। बस उन IBOutlets को हटाने की जरूरत थी और सब कुछ फिर से ठीक हो गया!

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