"अज्ञात वर्ग <इंटरफ़ेस बिल्डर फ़ाइल में MyClass>" रनटाइम पर त्रुटि


260

भले ही इंटरफ़ेस बिल्डर के बारे में पता है MyClass, मुझे आवेदन शुरू करते समय एक त्रुटि मिलती है।

ऐसा तब होता है जब MyClassमैं लाइब्रेरी का हिस्सा होता हूं, और अगर मैं क्लास को सीधे एप्लिकेशन टारगेट में संकलित करता हूं तो ऐसा नहीं होता है।


आप लाइब्रेरी से कैसे जुड़ेंगे?
एलिस वैन लोईज

मैं एक आश्रित उपप्रोजेक्ट का उपयोग करता हूं, और अपने वर्तमान लक्ष्य के "लिंक बाइनरी विद लाइब्रेरी" चरण के निर्माण में Xcode उपप्रोजेक्ट के उत्पादों से एक ड्रैग'एनडीरोप का निर्माण किया।
जूल

यदि वर्ग कोकोआपोड्स से है, तो यह github.com/CocoaPods/CocoaPods/issues/491 मदद कर सकता है ।
प्रोटोकॉल

संबंधित हो सकता है? stackoverflow.com/a/24924967/511299
सनकस

जवाबों:


222

" अज्ञात वर्ग MyClass in Interface Builder फ़ाइल " के बावजूद , रनटाइम पर प्रिंट की गई त्रुटि, इस समस्या का इंटरफ़ेस बिल्डर के साथ कोई लेना-देना नहीं है, बल्कि लिंकर के साथ है, जो एक वर्ग को लिंक नहीं कर रहा है क्योंकि कोई भी कोड इसका सीधे उपयोग नहीं करता है।

जब .nib डेटा (.xib से संकलित) रनटाइम पर लोड किया जाता है, MyClassएक स्ट्रिंग का उपयोग करके संदर्भित किया जाता है, लेकिन लिंकर कोड कार्यक्षमता, बस कोड अस्तित्व का विश्लेषण नहीं करता है, इसलिए यह नहीं पता है कि। चूंकि कोई अन्य स्रोत उस वर्ग को संदर्भित नहीं करता है, इसलिए निष्पादन योग्य बनाते समय लिंकर इसे अस्तित्व से बाहर कर देता है। इसलिए जब Apple का कोड ऐसी कक्षा को लोड करने की कोशिश करता है, तो वह इससे जुड़ा कोड नहीं ढूंढ सकता है, और चेतावनी को प्रिंट करता है।

डिफ़ॉल्ट रूप से, Objective-C लक्ष्यों -all_load -ObjCमें डिफ़ॉल्ट रूप से सेट किए गए झंडे होंगे, जो सभी प्रतीकों को रखेंगे। लेकिन मैंने C ++ लक्ष्य के साथ शुरुआत की थी, और ऐसा नहीं था। फिर भी, मुझे इसके चारों ओर एक रास्ता मिला, जो लिंकर को आक्रामक रखता है।

मूल रूप से मैं जिस हैक का उपयोग कर रहा था वह खाली स्थिर दिनचर्या को जोड़ना था:

+(void)_keepAtLinkTime;

जो कुछ नहीं करता है, लेकिन मैं एक बार फोन करूंगा, जैसे:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

यह लिंकर को पूरी कक्षा को रखने के लिए मजबूर करेगा, और त्रुटि गायब हो जाती है।

जैसा कि jlstrecker ने टिप्पणियों में बताया, हमें वास्तव में एक _keepAtLinkTimeविधि जोड़ने की आवश्यकता नहीं है । बस एक मौजूदा एक को बुला रहा है, जैसे:

   [MyClass class];

चाल करता है (जब तक आप एक से प्राप्त करते हैं NSObject)।

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

Xcode 6.3.2 और स्विफ्ट 1.2

दृश्य की स्विफ्ट परिभाषा। ओवरराइड करना सुनिश्चित करें init(coder aDecoder: NSCoder)। उद्देश्य-सी व्यू कंट्रोलर की परिभाषा। और, एक नाशपाती के पेड़ में एक निब।

जहाँ आप अपनी कक्षा लेते हैं, वहां मॉड्यूल विवरण को Nib विवरण निरीक्षक में जोड़ें।


2
.Xib डेटा रनटाइम पर लोड नहीं किया गया है। IB संकलक xib को nib में संकलित करता है; nib वह है जो रनटाइम पर लोड हो जाता है।
पीटर होसी

19
आपको संशोधित करने की आवश्यकता नहीं है MyClass। बस एक विधि को बुलाओ जो इसे विरासत में मिली है NSObject, जैसे +class
jlstrecker

10
हालाँकि मूल प्रश्न पोस्ट किए जाने पर यह कोई Xcode 4 नहीं था, फिर भी निम्नलिखित उचित प्रतीत होता है। Xcode 4 में त्रुटि को खत्म करने के लिए कुछ डमी विधि जोड़ने के बजाय, आप MyClass.mफ़ाइल इंस्पेक्टर के लक्ष्य सदस्यता अनुभाग में सभी आवश्यक लक्ष्यों की जांच कर सकते हैं ।
१३:०४ पर

51
इन दिनों एक और संभावना यह है कि MyClass.m आपके संकलित स्रोत निर्माण चरण में नहीं हो सकता है। ऐसा तब हो सकता है जब आप MyClass.h / m को अपनी परियोजना में खींचते हैं, बजाय इसके कि आप उन्हें New File का उपयोग करके बनाएँ।
स्टीवन फिशर

6
@JoshBruce आप स्विफ्ट समाधान की व्याख्या कर सकते हैं? मैं वास्तव में इसे नहीं समझता।
रयान बॉब्रोस्की

183

मैंने यह तय किया कि लौरा ने क्या सुझाव दिया था, लेकिन मुझे फाइलों को फिर से बनाने की जरूरत नहीं थी।

  • प्रोजेक्ट नेविगेटर में XCode 4 का उपयोग करते हुए, .m फ़ाइल का चयन करें जिसमें वह वर्ग है जिसके बारे में वह शिकायत कर रहा है

  • व्यू-> यूटिलिटीज-> शो फाइल इंस्पेक्टर पर जाएं
    (यह फ़ाइल इंस्पेक्टर को दाईं ओर दिखाएगा , उसके साथ .m- फ़ाइल विचार)।

  • लक्ष्य सदस्यता अनुभाग खोलें और सुनिश्चित करें कि आपका लक्ष्य इस .m- फ़ाइल के लिए चुना गया है

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


यह सच है कि कभी-कभी, लिंकर त्रुटि केवल आपके लक्ष्य में आपकी फ़ाइल को पहले स्थान पर संकलित नहीं करने के कारण होती है। आप जो वर्णन करते हैं, वह उस लक्ष्य को नियंत्रित करने का तरीका है जो किसी फ़ाइल से जुड़ा है। दुर्भाग्य से, मेरी फ़ाइल पहले से ही मेरे लक्ष्य का हिस्सा थी, लेकिन मेरे पास अभी भी एक लिंक मुद्दा था। यह संभवत: मेरी लाइब्रेरी के C ++ (ऑब्जेक्टिव-सी के विपरीत) के कारण है, जिसमें अलग-अलग डिफॉल्ट लिंकर फ्लैग हैं (ऊपर अलासैदर एलन और सिजो द्वारा पोस्ट देखें)।
15

5
इस सुझाव ने मेरे लिए काम किया, हालांकि थोड़ा अलग तरीके से, क्योंकि मेरा "लक्ष्य सदस्यता" चेकबॉक्स पहले से ही चेक किया गया था। मैंने इसे अनचेक किया और फिर से बनाया, लेकिन फिर मेरे नए वर्ग के नाम को इंगित करने के लिए त्रुटि संदेश बदल गया। बॉक्स को फिर से जाँचना और फिर से निर्माण करना, अब सब कुछ काम करता है। कैश फ़ाइलों को हटाने की तुलना में बहुत आसान है!
इलेक्ट्रोमगगोट

Xcode UI के माध्यम से महान समाधान। @electromaggot, जब आप मैन्युअल रूप से कक्षाएं जोड़ते हैं, तो Xcode भ्रमित हो सकता है, इसलिए आपको एक से अधिक फ़ाइल जोड़ने की आवश्यकता हो सकती है।
गोन्टेन

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

1
मैंने अपने प्रोजेक्ट की एक फ़ाइल को हटा दिया और बाद में उसी फ़ाइल को वापस जोड़ा और इससे समस्या हल हो गई।
माइंडस्पीकर

70

यह वास्तव में इंटरफ़ेस बिल्डर के साथ कुछ भी नहीं है, यहाँ क्या हो रहा है कि प्रतीकों को आपके स्थिर पुस्तकालय से Xcode द्वारा लोड नहीं किया जा रहा है। इस समस्या को हल करने के लिए आपको प्रोजेक्ट (और संभवतः लक्ष्य) बिल्ड सेटिंग्स -all_load -ObjCकी Other Linker Flagsकुंजी में झंडे जोड़ने की आवश्यकता है ।

चूंकि ऑब्जेक्टिव-सी केवल एक प्रतीक प्रति वर्ग उत्पन्न करता है, इसलिए हमें -OjjC ध्वज का उपयोग करके लिंकर को कक्षा के सदस्यों को भी लोड करने के लिए बाध्य करना चाहिए, और हमें -all_loadलिंकर ध्वज को जोड़कर अपनी सभी वस्तुओं को अपने स्थैतिक पुस्तकालय से शामिल करने के लिए भी बाध्य करना चाहिए । यदि आप इन झंडों को जल्द ही छोड़ देते हैं या बाद में आप त्रुटि में चलेंगे unrecognized selectorया अन्य अपवाद प्राप्त करेंगे जैसे कि आपने यहां देखा है।


5
मैंने पाया कि सिर्फ -ObjCझंडे ने इसे मेरे मामले में तय किया है।
काकोआ

5
@ कोको ऐसा इसलिए है क्योंकि आपके Xcode (LLVM) का संस्करण उस आदमी की तुलना में हालिया है जो इस उत्तर का उपयोग कर रहा था। आजकल, -ObjCसमस्या को ठीक करने के लिए उपयोग करना काफी अच्छा है।
तक

इसने ही मेरी मदद की। संकलन के दौरान इसने आवश्यक रूपरेखा संबंधी मुद्दों को दिखाया जो एक बार सभी रूपरेखाओं को आयात करने के बाद हल हो गया।
वैभव सरन

-ओबीजेसी के झंडे ने अकेले मेरा मुद्दा तय किया। मुझे वास्तव में iOS7 में all_load विशेषता होने के लिए त्रुटि मिली।
सुषमा सतीश

-All_load -ObjC का उपयोग करने से उत्पाद के आकार में अनावश्यक वृद्धि हो सकती है। यह समस्या केवल फ्रेमवर्क में श्रेणी फ़ाइलों के साथ होती है।
अली अमीन

26

मैं स्विफ्ट का उपयोग करके आज इस समस्या में चला गया।

मैंने एक वर्ग Model.h + Model.mको बदल दिया Model.swift। इस ऑब्जेक्ट का उपयोग इंटरफ़ेस बिल्डर में किया गया था class = Model

जैसे ही मैंने ऑब्जेक्ट को प्रतिस्थापित किया, क्लास को लोड नहीं किया जा सकता था।

आईबी में क्लास रेफरेंस बदलने के लिए मुझे क्या करना था:

Class = Model
Module = 

सेवा

Class = Model
Module = <TARGETNAME>

आप <TARGETNAME>बिल्ड सेटिंग्स में पाएंगे । यह वह नाम भी है जो आपके उत्पन्न स्विफ्ट-हैडर में दिखाई देता है:#import "TARGETNAME-Swift.h"


1
यह सही उत्तर लगता है। जब तक कोई व्यक्ति अन्यथा नहीं कह सकता है, इसे सही के रूप में चिह्नित किया जाना चाहिए।
Bjørn Ruthberg

1
शानदार जवाब धन्यवाद। मेरे लिए Moduleड्रॉप डाउन में नाम वहीं था। यह मेरे ऐप का नाम था।
23H पर क्रिस

इससे मेरा काम बनता है। मेरी समस्या के लिए, आपके उत्तर में उल्लिखित <TARGETNAME> फ्रेमवर्क का नाम है जिसमें वर्ग शामिल है।
टायलर लॉन्ग

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

AppDelegate के लिए, मैं इंटरफ़ेस बिल्डर UI में इसे ठीक करने में सक्षम था। विंडो के भीतर UI तत्व के कस्टम वर्ग के लिए, इंटरफ़ेस बिल्डर UI मुझे कस्टम क्लास और मॉड्यूल सेट नहीं करने देगा। मुझे निम्न कार्य करना था: (1) .xib फ़ाइल को "सोर्स कोड" के रूप में खोलें (उस पर राइट क्लिक करें)। (2) CustomClass विशेषता के आगे "customModule = <TARGETNAME>" विशेषता जोड़ें।
पोल्स्बो

20

"प्रोजेक्टनेम" पर जाएं, उस पर क्लिक करें और फिर "बिल्ड चरणों" टैब पर जाएं, और फिर "संकलन स्रोतों" पर क्लिक करें, और फिर "+" बटन पर क्लिक करें, एक विंडो दिखाई देगी, "MyClass" चुनें। एम "फ़ाइल और फिर" जोड़ें "पर क्लिक करें,

प्रोजेक्ट बनाएं और उसे चलाएं, समस्या निश्चित रूप से हल हो जाएगी


हाँ, मैंने उन सभी लक्षित बक्सों की जाँच नहीं की थी जिन्हें मैं अपनी नई आयातित कक्षाओं में जोड़ना चाहता था। धन्यवाद!
जोएल बामर

हाँ! मेरी वीसी फ़ाइल लक्ष्य परियोजना से गायब थी।
सेबेस्टियन डोरोनिक

19

यह एक Xcode4 कैश समस्या है, बस के तहत सभी फ़ोल्डर्स को हटा दें / उपयोगकर्ता / your_user / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर / / / /

अगर आपके iPhone पर भी यही समस्या है, तो पुराने ऐप को चलाने से पहले हटा दें ...

सौभाग्य। पास्कुअल


8
प्रोजेक्ट बिल्ड सेटिंग्स में आपको "अन्य लिंकर फ्लैग्स" कुंजी में "-all_load -ObjC" झंडे जोड़ने की आवश्यकता है। यह एक Xcode 4 विशिष्ट समस्या नहीं है, और वास्तव में इसका इंटरफ़ेस बिल्डर के साथ कोई लेना-देना नहीं है।
अलसदेयर एलन

यह समाधान पहले से ही जनवरी 2010 में सुझाया गया था (ऊपर देखें)।
जूल

6
हां - ऐसा करने का आसान तरीका सिर्फ iOS सिम्युलेटर खोलना है और मेनू से 'रीसेट सामग्री और सेटिंग्स' चुनें
RanLearns

या आप कर सकते हैं कि मैंने क्या किया और बस सिम्युलेटर होम स्क्रीन से ऐप को प्रश्न में हटा दें। मेरे पास एक ही त्रुटि संदेश था, लेकिन यह एक पुराने ऐप प्रतिनिधि को संदर्भित कर रहा था।
spstanley

16

कभी-कभी IBuilder याद आती है customModule="AppName" customModuleProvider="target"

इसे ठीक करने के लिए, स्रोत कोड के रूप में स्टोरीबोर्ड खोलें और इस लाइन को बदलें:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

इसके लिए:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

Xcode 6.3 (6D570) का उपयोग करते हुए जैसे ही मैं सेटिंग को वापस मूल (खराब) में चलाता हूं। बग? मैं एक उद्देश्य सी परियोजना में एक स्विफ्ट फ़ाइल को शामिल करने की कोशिश कर रहा हूं।
Addzo

XCode 6.4 पर, स्टोरीबोर्ड स्रोत कोड में customModuleProvider = "लक्ष्य" को जोड़ने के लिए, वांछित दृश्यमंट्रोलर के तहत, समस्या को ठीक किया।
अमरो शफी जूल

मैं बस के साथ अपने मुद्दे को हल करने में सक्षम था customModule="MyFrameworkName"। विशाल +10
स्टेन

दरअसल, मेरा मुद्दा विपरीत था, मैं कस्टमटैगेट को हटाना चाहता था लेकिन Xcode xib स्रोत फ़ाइल को नहीं बदल रहा था, इसलिए मुझे इसे बनाने के लिए customModule = "AppName" customModuleProvider = "लक्ष्य" को हटाना पड़ा।
एड्रियाना

14

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

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


2
मैं CocoaPods द्वारा स्थापित स्विफ्ट परियोजना में एक स्विफ्ट फ्रेमवर्क का उपयोग कर रहा हूं। यह तरीका काम करता है। और मॉड्यूल नाम फ्रेमवर्क का नाम है।
JsW

1
यह पूरी तरह से काम करता है। उस मॉड्यूल को हटाने की आवश्यकता क्यों है ??
at श्रीनिवासन

कोकोपोड चौखटे मुद्दों के साथ एकदम सही काम करता है ... सही जवाब के लिए आप के लिए यश ...
जयंत रावत

13

बिल्ड चरणों-> संकलन सूत्रों पर जाएं और अपनी नई .m फाइलें जोड़ें।


हां, एक XCode 4.5 परियोजना में एक पिछले परियोजना से नई फ़ाइलों को जोड़ने के बाद, संकलन सूत्रों की सूची में .m फ़ाइलों को जोड़ने से यह सुनिश्चित हो गया। "-All_load -ObjC" जोड़ना मेरे मामले में काम नहीं किया, हालांकि चोट नहीं पहुंचाई।
Whyoz

13

मेरे मामले में यह उस वर्ग के लिए एक त्रुटि दिखा रहा था जो मौजूद नहीं था! मुझे संदेह था कि यह कुछ ऐसा था जो स्टोरीबोर्ड फ़ाइल में अंकित हो गया था। यदि आप त्रुटि में वर्ग फ़ाइल को नहीं पहचानते हैं तो यह कोशिश करें:

1) उदात्त या किसी अन्य अच्छे संपादक में अपनी परियोजना खोलें। संदर्भित वर्ग के लिए खोजें। 2) पूरे बिट को हटा दें जो कहता है

customClass="UnrecognizedClassName"

3) इसे बचाओ। 4) xcode पर लौटें और प्रोजेक्ट को साफ़ करें, और इसे अभी चलाने का प्रयास करें।

मेरे लिए काम किया।

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


मैं OSX TextEdit ऐप का उपयोग करता हूं। इस ऑपरेशन के लिए ठीक काम किया। पहले अपने प्रोजेक्ट को बंद करें और Xcode को बंद करें।
TJ

इससे भी मदद मिली। मेरे पास एक ही कस्टम क्लैस के साथ एक से अधिक ऑब्जेक्ट थे, मैंने संभवतः नियंत्रक के बजाय दृश्य पर क्लिक किया और उसी नाम को असाइन किया।
Mc-

1
यह मेरे सामने आई समस्या का समाधान भी था; मैंने पहले एक आंशिक वर्ग नाम दर्ज किया था और किसी तरह स्टोरीबोर्ड को इस तरह बचाया गया था (जैसे customClass="MyCla")। कस्टम क्लास असाइनमेंट को हटाने के बजाय, मेरे लिए यह समझदारी थी कि मैं जिस क्लास में पहली बार इस्तेमाल करने का इरादा रखता हूँ :)
dave

9

मैं सिर्फ इस उत्तर को जोड़ना चाहता हूं क्योंकि यदि सभी उत्तर यहां नहीं हैं, तो यह माना जाता है कि वर्ग वास्तव में मौजूद है .. यह सिर्फ इतना है कि लिंकर / कंपाइलर इसे देखने के लिए बहुत गूंगा है .. इस प्रकार उत्तर या तो घूमने वाले को जोड़ने के लिए घूमता है, जो अस्तित्व के लिए लिंकर को सचेत करता है। वर्ग के लिए या 'बल' के लिए एक हैक बनाने यह मौजूद है ..

मेरी समस्या तब होती है जब यह संदेश वास्तव में एक गैर-मौजूद वर्ग के बारे में बात कर रहा होता है .. इसलिए एक उदाहरण मुझे एक पुराने गिट संशोधन के बारे में बताएगा जो कि एक निश्चित वर्ग का ज्ञान नहीं है .. फिर भी संकलक को शिकायत है कि उक्त वर्ग नहीं करता है ' टी मौजूद है ..

उपाय?

  • पूरी बात Nuke ! पहले इस निर्देशिका की सभी सामग्रियों को हटाकर सभी बिल्ड फ़ाइलों आदि को हटा दें । ~ / Library / Developer / Xcode / DerivedData
  • फ़ोन से ही एप्लिकेशन को हटाएं (और यदि आप सिम्युलेटर का उपयोग कर रहे हैं तो सिम्युलेटर सामग्री को साफ़ करें)

आपको उसके बाद जाना अच्छा होना चाहिए


2
यह एक पर्याप्त नहीं है, मेरी समस्या तय कर सकते हैं। मेरा मुद्दा बिलकुल वही था जहाँ फ़ाइल पहले ही हटाई जा चुकी थी फिर भी संकलित करते समय चेतावनी दिखाई दे रही थी।
ब्रेट

स्टोरीबोर्ड में आपको आइडेंटिफायर भरना है। कभी-कभी मैं इसे गलती से "क्लास" फील्ड (आइडेंटिटी इंस्पेक्टर में) लिख देता हूं। इसलिए कंपाइलर एक कारण के साथ शिकायत कर रहा है कि क्लास मौजूद नहीं है!
विंसेंट

9

त्रुटि को दूर करने का सबसे अच्छा तरीका है: 1) " लक्ष्य सदस्यता " के तहत , क्लास फ़ाइल (.m) 2 का चयन करें " प्रोजेक्ट नाम प्रविष्टि " "चेक" करें


यह काम। मैं एक पॉड विकसित कर रहा था और किसी कारण से पॉड स्थापित कमांड एक विशेष वर्ग फ़ाइल में गलत लक्ष्य लागू कर रहा था। यह एक संसाधन बंडल पर लागू किया जा रहा था जो मेरे पास था। सही विन्यास पॉड्स है- <प्रोजेक्ट-टाइटल> - <पॉड-टाइटल>
क्रोसुल्लिवन

यह मेरे लिए काम नहीं करता है। लक्ष्य सदस्यता सही है, लेकिन त्रुटि उत्पन्न होती रहती है।
कोकोडको

8

मैंने अपने class.h और .m से पाठ की प्रतिलिपि बनाकर, प्रोजेक्ट से उन वर्ग फ़ाइलों को हटाकर, "Add File" का उपयोग करके उसी नाम से नई class.h और .m फाइलें बनाईं। फिर मैंने कोड को नई फ़ाइलों में वापस पेस्ट किया, और सब कुछ बहुत अच्छा काम किया। किसी तरह फ़ाइलों को सही ढंग से लिंक नहीं किया गया था जब वे बनाए गए थे। मुझे उसके बाद किसी भी लिंकर झंडे का उपयोग करने की आवश्यकता नहीं थी।


1
जब मैंने पहली बार उन फ़ाइलों को बनाया था जिनके पास अंत में मैं नहीं हूँ। मैंने फ़ाइल का नाम बदलने और उसे वापस जोड़ने का प्रयास किया, हालाँकि मुझे अभी भी फ़ाइल को हटाना और एक्सकोड के खुश होने से पहले उसे पुनः बनाना था।
11'11

आपकी फ़ाइल संभवतः आपके लक्ष्य का हिस्सा नहीं थी। इसे फिर से जोड़ना उचित लक्ष्य में डिफ़ॉल्ट चेकबॉक्स के साथ समाप्त हुआ।
15

1
इस समाधान ने भी मेरे लिए काम किया, लेकिन मैंने 100% सुनिश्चित किया कि इससे पहले कि मैं पहली कक्षा (.h + .m) को हटाऊं, मैंने जाँच की कि यह मेरे लक्ष्य का हिस्सा था। मेरे लिए वह समस्या नहीं थी। लौरा की तरह, मैंने बस कक्षा को हटा दिया और इसे फिर से (एक अलग नाम के साथ) बनाया, और इस पृष्ठ पर अन्य समाधानों के बिना यह ठीक काम किया।
नैट

7

मैंने अंतिम रूप से यह तय किया था, मैं अपनी .m फ़ाइल में निम्न कोड जोड़ना भूल गया था:

@implementation MyTableViewCell

@end

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

मैं .xib को स्रोत के रूप में देखने और MyTableViewCell को देखने के अन्य मंचों से सभी चरणों से गुजरा था, हालांकि मैंने इसे अपने कोड से बाहर टिप्पणी की थी। मैंने सिम्युलेटर को रीसेट करने की कोशिश की थी। मैंने अपनी सभी कक्षाओं को अलग-अलग फाइलों में तोड़ने की कोशिश की, जिन्हें इंटरफेस के नाम से जाना जाता है, लेकिन इसके बाद तक कुछ भी काम नहीं हुआ।

मेरे अनुभव में PS, इससे कोई फर्क नहीं पड़ता कि .h / .m फ़ाइलों के नाम @interface के नामों से अलग हैं। मेरे पास कई फाइलें हैं जिनमें एक से अधिक @ इंटर्फेस हैं और वे ठीक काम करती हैं।

PPS की मेरे पास अधिक विस्तृत व्याख्या है कि क्यों UITableViewCell और UICollectionViewCell इस त्रुटि का कारण https://stackoverflow.com/a/22797318/539149 है, साथ ही इसे रजिस्टर-क्लास का उपयोग करके संकलन-समय पर कैसे प्रकट किया जाए: forCellWithReuseIdentifier:।


6

ऐसा इसलिए होता है क्योंकि .xib को पुराने App प्रतिनिधि के लिए एक बासी कड़ी मिल गई है जो अब मौजूद नहीं है। मैंने इसे इस तरह तय किया:

  • .Xib पर राइट क्लिक करें और Open as> Source code चुनें
  • इस फ़ाइल में, पुराने एप्लिकेशन प्रतिनिधि को खोजें और इसे नए के साथ बदलें

स्रोत कोड के रूप में खोलें अब मौजूद नहीं है, लेकिन आप बस आसानी से राइट क्लिक कर सकते हैं, शो इन फाइंडर, फिर फ़ाइल पर राइट क्लिक करें, और टेक्स्टएडिट में खोलें। बेशक, कोई भी बदलाव करने से पहले फाइल का बैकअप लें;)
स्कॉट एलन

6

बस appdelegate applicatoindidfinishlanching विधि की शुरुआत में नीचे कोड जोड़ें, तो यह ठीक काम करेगा

[मायक्लास क्लास];


5

मैंने यह कोशिश की, और अन्य, इस साइट पर सूचीबद्ध उत्तर, जिनमें से किसी ने भी इसे मेरे लिए हल नहीं किया। यह टिप्पणियां ( http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330-unknown-class-interface-builder-file.html ) ने मदद की:

खोज और खोज और खोज के बाद, मैंने आखिरकार एक फ़ाइल में छिपे इस हटाए गए वर्ग का नाम खोज लिया। मुझे एक्स-कोड में इंटरफ़ेस बिल्डर फ़ाइलों को खोलना था, उन पर राइट क्लिक करके और 'सोर्स कोड के रूप में दृश्य' चुनकर। फिर उसे खोजते हुए ऊपर आया

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

बस उस अंतिम पंक्ति को हटाने से दुर्भाग्य से ठीक नहीं होता है, यह शिकायत करते हुए कि फ़ाइल में गलत संख्या में आइटम हैं। आपको इसके ऊपर की पंक्तियों के अनुभाग में संबंधित लाइन को हटाने की आवश्यकता है, जो इसे संदर्भित करता है CustomClass


5

मेरे मामले में, मेरे पास XCode6 है, निर्दिष्ट वर्ग .m फ़ाइल बिल्ड चरण में गलत स्थान पर है - यह संकलन सूत्रों के अंतर्गत होना चाहिए था , लेकिन अंत मेंबंडल संसाधन कॉपी करें


आपके लिए धन्यवाद, मैंने सूची को
देखना


4

यह समस्या पुरानी नहीं लगती है।

मैं Xcode 8 के साथ एक ही मुद्दा था और इसे स्माइलबोट की तरह परिचित हल कर दिया :

  1. अपनी स्टोरीबोर्ड फ़ाइल को Xcode के भीतर "स्रोत कोड" के रूप में खोलें:

  2. जिस वर्ग को संदर्भित किया जा रहा है उसे खोजें और जो पूरी बिट कहती है उसे हटा दें

customClass = "UnrecognizedClassName"

  1. अपनी स्टोरीबोर्ड फ़ाइल को "इंटरफ़ेसबिल्डर - स्टोरीबोर्ड" के रूप में फिर से खोलें और अपने ऐप का पुनर्निर्माण करें।

3

बस MyClass.m और .h को निकालें और उन्हें फिर से प्रोजेक्ट में जोड़ें मेरे लिए काम है।


3

मेरे पास '' इंटरफ़ेस बिल्डर फ़ाइल में अज्ञात वर्ग favouritesButton '' है और इसे नीचे एक स्टोरीबुक दृश्य में ट्रैक किया गया है जहाँ प्रश्न में बटन में पहचान निरीक्षक के शीर्ष पर क्लास फ़ील्ड में "favouritesButton" का फर्जी कस्टम वर्ग था। मेरा मतलब उस मूल्य को अगले क्षेत्र में रखना है: पहचान लेबल।

इसे "UIButton" में बदलने से समस्या हल हो गई।


2

मैं स्विफ्ट में इस में भाग गया।

.Xib फ़ाइल को प्रोजेक्ट के Base.lproj फ़ोल्डर में ले जाने से इस त्रुटि से छुटकारा मिल गया।


इसे साझा करने के लिए धन्यवाद, लेकिन इससे मेरी समस्या हल नहीं हुई। यहाँ मैं अंत में पाया समाधान है: stackoverflow.com/a/28760089/456434
Mazyod

2
मैं उस समस्या में भी भाग गया। लेकिन मेरे मामले में लापता मॉड्यूल का नाम समस्या थी: देखें < stackoverflow.com/a/29013058/784318 >
Besi

1

जब मैं यूनिवर्सल के लिए Xcode 4 के तहत अपने aaLuminate ऐप को परिवर्तित कर रहा था, तो आज मुझे यह त्रुटि मिली। यह ऐप उपयोगिता टेम्पलेट पर आधारित है और मूल रूप से Xcode 3 के तहत बनाया गया था।

समय बचाने के लिए मैंने आईफ़ोन मेन और फ्लिपसाइड व्यूज़ को यूनिवर्सल ऐप पर उपयुक्त नामों में कॉपी किया। मुझे "इंटरफ़ेस बिल्डर फ़ाइल में अज्ञात वर्ग x" त्रुटि का अनुभव हुआ। मेरे मामले में यह XIB फ़ाइलों या लक्ष्यों में कुछ भी नहीं था।

मैंने अन्य कारणों से आनल्यूमिनट-इन्फो.प्लिस्ट फाइल को भी कॉपी किया था - इसमें मेनविंडो के लिए एक पुरानी कुंजी "मेन निब फाइल बेस नाम" था।

जैसे ही मैंने इस कुंजी को हटा दिया, इसने समस्या को ठीक कर दिया!


1

मेरे मामले में मुझे यह त्रुटि मिली क्योंकि मैंने एक नई परियोजना बनाकर कुछ कामों को बचाने की कोशिश की और फिर कई स्रोत फ़ाइलों को हटाकर उसी नाम के स्रोत फ़ाइलों को काम करने वाली परियोजना से कॉपी कर लिया। मैंने अपनी MainStoryBoard फ़ाइल की भी प्रतिलिपि बनाई जो कि मेरे RootViewController की तलाश में थी। हालाँकि, जब मैंने मूल RootViewController को हटा दिया था और फिर पिछले उत्पाद से RootViewController में जोड़ा गया था, तो जाहिर है कि Add Files ऑपरेशन ऊपर दिए गए सुझाव के अनुसार लक्ष्य बॉक्स को "चेक" करने में विफल रहा। केवल "आयात की गई सभी" .m "फ़ाइलों को हटाकर और सुनिश्चित करें कि लक्ष्य सदस्यता बॉक्स को चेक किया गया था, सब ठीक था। मुझे लगता है कि क्या हो रहा था कि स्टोरीबोर्ड फ़ाइल एक वर्ग की तलाश में थी जिसे लिंक से "बहिष्कृत" किया गया था क्योंकि लक्ष्य सदस्यता अनियंत्रित थी। यह सुनिश्चित करने के लिए कि लक्ष्य के लिए आवश्यक फाइलें लक्ष्य निरीक्षक में निर्दिष्ट हैं, फाइल इंस्पेक्टर ने चाल चली। धन्यवाद पैट! (ऊपर देखो)


1

मेरे मामले में ऐसा इसलिए था क्योंकि मैंने .h फ़ाइल में एक UITableView सेल के एक उपवर्ग का उपवर्ग घोषित किया था (दोनों उपवर्गों की घोषणा समान .h फ़ाइल में थी), लेकिन उस दूसरे उपवर्ग का एक खाली कार्यान्वयन करना भूल गया। .m फ़ाइल।

आप .h फ़ाइल में घोषित उपवर्ग के किसी भी उपवर्ग को लागू करने के लिए मत भूलना! अगर आप एक वर्ग प्रति .h / .m फ़ाइल के साथ काम कर रहे हैं तो सरल, लेकिन यह भूलना आसान है क्योंकि Xcode आपके लिए ऐसा करेगा।


1

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

डिबग करने के लिए, मैंने अपनी कक्षा का नाम बदलकर RateView2 कर दिया और UIView के कस्टम वर्ग फ़ील्ड को छोड़कर मिलान के सभी संदर्भ बदल दिए। त्रुटि संदेश अभी भी पहले के रूप में RateView लापता वर्ग के रूप में दिखाई दिया। इसने पुष्टि की कि त्रुटि संदेश कस्टम वर्ग फ़ील्ड के मान से संबंधित था। मैंने यह मान RateView2 में बदल दिया और त्रुटि संदेश "इंटरफ़ेस बिल्डर में अज्ञात वर्ग RateView2" में बदल गया। प्रकार की प्रगति।

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


1

मेरे मामले में मैंने "viewController" नामक एक वर्ग को हटा दिया था, यह एहसास नहीं हुआ कि इसे स्टोरीबोर्ड के पहचान निरीक्षक ('कस्टम क्लास' के ऊपर) के साथ चुना गया था।

आपको बस अपने पहचान निरीक्षक के कस्टम क्लास फील्ड में व्यू कंट्रोलर के लिए सही क्लास का चयन करना है या अपने प्रोजेक्ट में एक नई क्लास जोड़ना है और उस एक को अपनी कस्टम क्लास के रूप में चुनना है।

मेरे लिए काम किया!



1

इसने मुझे थोड़ा सा पागल कर दिया और ऊपर दिए गए किसी भी सुझाव ने मुझे त्रुटि से छुटकारा पाने में मदद नहीं की। सौभाग्य से मेरे पास कक्षा का उपयोग करने वाला केवल एक आईबी ऑब्जेक्ट था इसलिए मैंने इसे हटा दिया और इसे उसी वर्ग के साथ वापस जोड़ा। त्रुटि दूर हो गई ...

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