"ViewController नाम की कक्षा के लिए कोई जानकारी नहीं मिल सकी"


154

जब से मैंने Xcode (4.6.3) का उपयोग शुरू किया है तब से यह बग मुझे पागल कर रहा है। जब भी मैं स्टोरीबोर्ड आइटम को अपने कोड से लिंक करने का प्रयास करता हूं, मुझे त्रुटि मिलती है:

ViewController नाम की कक्षा के लिए कोई जानकारी नहीं मिल सकी।

यह कस्टम कक्षाओं के साथ भी होता है। मैंने इस तरह के तरीकों की कोशिश की है:

  • प्रतिनिधि डेटा हटा रहा है।
  • कक्षाओं को हटाना और फिर से जोड़ना।
  • Xcode को पुनः आरंभ करना
  • Xcode को पुनः स्थापित करना

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


क्या आप सुनिश्चित हैं कि उचित लक्ष्य में ViewController .m फ़ाइल शामिल है? (दाहिने इंस्पेक्टर पैनल में चेकबॉक्स)
अल्फी हंससेन

2
आपके स्टोरीबोर्ड में एक दृश्य नियंत्रक है और उस वर्ग के नाम के लिए "ViewController" निर्दिष्ट किया गया है जिसे दृश्य को प्रबंधित करने के लिए त्वरित किया जाना चाहिए। स्टोरीबोर्ड में प्रत्येक दृश्य नियंत्रक की जांच करें: दृश्य नियंत्रक का चयन करें, दाएं हाथ के फलक पर "पहचान निरीक्षक" को देखें, और "कस्टम क्लास" संपत्ति को देखें। यदि यह "ViewController" पढ़ता है तो आपकी समस्या है। उस वर्ग के नाम पर रखें जिसे आपके व्यू कंट्रोलर को प्रबंधित करना चाहिए ... या डिफ़ॉल्ट UIKit कार्यान्वयन प्राप्त करने के लिए UIViewController में रखें।
निकोलस हार्ट

1
मैंने पहचान निरीक्षक में कस्टम वर्ग को "UIViewController" में बदल दिया, और अब स्टोरीबोर्ड से ViewController.h में ctrl-drag करने में सक्षम नहीं था। अगर मैं एक नया वर्ग बनाता हूं और उसमें ctrl-drag करने की कोशिश करता हूं (तदनुसार व्यू कंट्रोलर की कक्षा निर्धारित करने के बाद), मुझे वही मिलता है "कोई जानकारी नहीं मिल रही है" त्रुटि।
user2597451

4
मुझे यह समस्या थी, और ऑटो-जेनरेट किए गए व्यूकंट्रोलर वर्ग को संशोधित करके मेरे लिए काम किया। उदाहरण के NSLog()लिए viewDidLoad:
jb

जवाबों:


292

मेरे लिए इस मुद्दे को हल करने से वास्तव में परियोजना से कक्षा हटा दी गई थी।

कदम:

  1. प्रोजेक्ट फ़ाइल एक्सप्लोरर (बाएं पैनल) में कक्षा ढूंढें और राइट क्लिक करें -> हटाएं
  2. संदर्भ निकालें (कूड़ेदान में न जाएं क्योंकि आप अच्छे के लिए कक्षा खो देंगे)
  3. उस फ़ोल्डर पर राइट क्लिक करें जिसमें क्लास सम्‍मिलित है -> फ़ाइलों को जोड़ें ...
  4. उस क्लास को ढूंढें जिसे आपने अभी फाइल सिस्टम में डिलीट किया है

यह एक्सकोड को क्लास को स्टोरीबोर्ड में वापस जोड़ने के लिए मजबूर करने के लिए लगता है।

नोट: मेरे लिए निम्नलिखित काम नहीं किया:

  • समापन Xcode
  • परियोजना की सफाई
  • स्टोरीबोर्ड से वर्ग का नाम हटाकर उसे फिर से दर्ज करना

मुझे लगता है कि यह Apple के हिस्से में एक बग है


8
मैंने यह कोशिश की, लेकिन यह मेरे लिए काम नहीं आया / -: वही त्रुटि।
माइकल

1
@ माइकल, हां, अब मैं ऐसी स्थिति में हूं जहां उपरोक्त में से कोई भी काम नहीं करता है। Xcode एक ***
क्रिस हैरिसन

5
यह मुद्दा जुलाई 2013 तक वापस आता है, क्योंकि आज मई 2016 को मैंने उसी बग को प्राप्त किया और इसे इस उत्तर के साथ तय किया। इतने सालों में कैसे आया Apple अच्छे के लिए इसे ठीक नहीं करता है?
स्काईवल्कर

3
विश्वास नहीं कर सकता यह अभी भी एक समस्या है। बस यह XCode 8.1 पर करना था ..
फिस्क

2
2017 (संस्करण 8.2 (8C38)) और अभी भी जीवित है, Xcode SUCKS। यह मेरे साथ होता है जब आप स्टोरीबोर्ड से यूआई स्टाफ को एक सीन से दूसरे सीन में कॉपी करते हैं
Jaime Agudo

135

मामले में किसी को भी इस बात से निराशा होती है, वहाँ काम करने के लिए एक चाल है।

मैं जो कुछ भी करता हूं, वह उदाहरण के लिए मेरी कक्षा में एक आउटलेट दर्ज करता है: @IBOutlet weak var someView: UIView!और कोड से दृश्य में आईबी या स्टोरीबोर्ड पर खींचें । इसके बाद, मैं कनेक्शन बनाने के लिए आईबी / स्टोरीबोर्ड से अपनी कक्षा में खींचने में सक्षम हूं, सहायक संपादक "स्वचालित", आदि में वर्ग को पहचानता है ...

हर बार काम करता है।


6
@ Gmeister4, यदि आप अपने कोड में एक आउटलेट बनाते हैं तो यह आउटलेट के बाईं ओर एक छोटा सा सर्कल दिखाता है। अपना कनेक्शन बनाने के लिए आईबी या स्टोरीबोर्ड में उस सर्कल से दृश्य पर क्लिक करें और खींचें।
एंड्रयू रॉबिन्सन

4
शीर्ष उत्तर की तुलना में आसान। +1
cph2117

2
इसके बाद भी यह उचित तरीके से नहीं कर सकता, इसके बाद भी नहीं - लेकिन कम से कम यह काम करता है!
अलेक्जेंड्रे जी

1
उपरोक्त में से किसी भी उत्तर ने मेरे लिए काम नहीं किया। केवल इस जवाब ने मेरे लिए काम किया।
coolcool1994

1
बहुत बढ़िया, यह बात है!
सैम

38

मेरे लिए उन्हें सही कॉलम में अपनी लक्ष्य सदस्यता से हटाकर और उन्हें फिर से जोड़ने का काम किया यहां छवि विवरण दर्ज करें


इसने भी मुझसे काम लिया। मैंने ViewController.swift क्लास को डुप्लिकेट किया था, और यह समाधान प्रतीत होता है।
उबरजम्स

मुझे लगता है कि यह Xcode का एक बग है जो अभी भी Xcode 8.0 में मौजूद है
jiangjiefs

यह अभी मेरे लिए Xcode 8.3.3 में हुआ और आपका समाधान सबसे सरल और कारगर है। इसलिए आपका धन्यवाद!!!
राबर्टआरएम

अभी भी Xcode 11.5 में मौजूद है (मेरा मतलब गंभीरता से Apple ??) है। केवल समाधान जो मेरे लिए यहां काम करता है।
क्रिस्टोफ फोंदकीस जूल

12

वीसी द्वारा क्लास फ़ाइल को संदर्भित नहीं करने के कारण शायद ही कभी Xcode होता है। इसके लिए सरल उपाय है:

दी गई संपत्ति को मैन्युअल रूप से लिखें।

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

यह @IBOutlet से पहले एक खाली लिंक साइन करेगा , सहायक संपादक में अपना प्रोजेक्ट खोलें, फिर लिंक साइन पर क्लिक करें यहां छवि विवरण दर्ज करेंऔर उस व्यू में खींचें, जिसे आप कनेक्ट करना चाहते हैं (मैंने टेबल व्यू के साथ कनेक्ट किया है)। और बस। हैप्पी कोडिंग का आनंद लें !!!


8

मुझे सिर्फ अप्रैल 2017 को Xcode 8 के साथ यह समस्या थी

बस कोड के माध्यम से एक आउटलेट बनाना और इसे संकलित करना। उदाहरण के लिए:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

आपको Xcode पसंद है ...

संपादित करें: अभी भी Xcode 9 पर हो रहा है


7

निम्नलिखित कदम मेरे लिए काम करता है आशा है कि आप के लिए भी काम करता है

1- Xcode बंद करने के बाद आपको प्रोजेक्ट को फिर से खोलना होगा।

2- प्रोजेक्ट फाइलों को अनुक्रमित करने के लिए प्रतीक्षा करें

3-जाँच करें कि यह काम करता है या नहीं

4-अगर अभी भी चरण 5 का काम नहीं कर रहा है, अगर आपके लिए खुश नहीं है :)

5- अपने प्रोजेक्ट टारगेट को क्लीन एंड बिल्ड करें

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


7

मैंने सब कुछ करने की कोशिश की और यह काम नहीं किया, इसलिए मेरे लिए जो काम किया है वह है:

  • स्वच्छ बनाएँ फ़ोल्डर और परियोजना।
  • ओपन प्रोजेक्ट्स (विंडो -> प्रोजेक्ट्स)
  • सूची पर अपनी परियोजना का पता लगाएं और व्युत्पन्न डेटा को हटा दें
  • Xcode बंद करें
  • कंप्यूटर को पुनरारंभ करें (खुले हुए विंडो को फिर से खोलने के बिना)
  • Xcode चलाएं
  • काम!

मेरे सभी दृश्य नियंत्रकों को मान्यता नहीं दी जा रही थी, इसलिए सभी फ़ाइलों को हटाना और पुनः जोड़ना एक विकल्प नहीं था क्योंकि यह एक बड़ी परियोजना है।


4

मेरे लिए, निम्नलिखित ने काम किया:

  1. 'क्लीन बिल्ड फोल्डर' कमांड प्राप्त करने के लिए उत्पाद मेनू पर 'क्लीन' और 'क्लीन बिल्ड फोल्डर' (प्रेस 'विकल्प) करें

  2. Xcode बंद करो

  3. टर्मिनल में, व्युत्पन्न डेटा फ़ोल्डर में जाएं:

    (/ उपयोगकर्ता // लाइब्रेरी / डेवलपर / Xcode / DerivedData)

अपनी परियोजना के लिए व्युत्पन्न डेटा को हटाएं।

  1. हवा में मृत चिकन की लहर

  2. Xcode प्रारंभ करें


3

मुझे अब तक एक-दो उत्तरों का संयोजन करना था:

  1. स्टोरीबोर्ड से कस्टम वर्ग नाम निकालें।

(स्टोरीबोर्ड में व्यू कंट्रोलर के शीर्ष पर पीले बटन पर क्लिक करें -> पहचान निरीक्षक पर जाएं (विकल्प + कमांड + 3) -> शीर्ष पर कस्टम वर्ग का नाम हटाएं)

  1. संदर्भ नियंत्रक फ़ाइल का संदर्भ निकालें।

(फ़ाइल को राइट-क्लिक करें -> हटाएं -> संदर्भ हटाएं)

  1. प्रोजेक्ट में वापस दृश्य नियंत्रक फ़ाइल जोड़ें।

(उस फ़ोल्डर पर राइट क्लिक करें जहां फ़ाइल थी -> "फ़ाइल को [प्रोजेक्ट] में जोड़ें")

  1. कस्टम वर्ग का नाम वापस स्टोरीबोर्ड में जोड़ें।

3

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


3

बटन से कोड तक कनेक्शन को खींचने के बजाय, मेरे लिए जो काम किया गया वह था:

  1. वांछित स्टोरीबोर्ड आइटम पर क्लिक करना।
  2. कनेक्शन निरीक्षक (दायां पैनल) खोलना
  3. कोड के क्षेत्र में + सर्कल से खींचकर। इस तरह:

इस तरह से मैंने अपना कोड लिंक करने के बाद, इसके बाद से सामान्य रूप से काम किया।


3

निशाने पर रहें!

मैं एक Xib के साथ एक नया वर्ग जोड़ रहा था और मैंने इस मुद्दे को देखना शुरू कर दिया और मैंने यहाँ पर जवाबों को देखने के लिए एक अच्छा समय बिताया और यह देखा कि क्या इससे कोई फर्क पड़ता है।

जैसा कि होता है, मेरे कार्यक्षेत्र में कई लक्ष्य होते हैं और अक्सर मुझे उनके बीच स्विच करना पड़ता है।

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

संक्षेप में

चरण 1।

लक्ष्यीकरण

सुनिश्चित करें कि आपके पास सही लक्ष्य सेट है ताकि अनुक्रमण समझ में आए।


3

यह मेरे लिए काम किया:

  1. ' क्लीन बिल्ड फोल्डर ' का प्रदर्शन करें
    ('विकल्प' कुंजी को दबाए रखें और इसे एक्सेस करने के लिए " उत्पाद " मेनू पर जाएं।
  2. " उत्पाद " मेनू से एक सरल "क्लीन" (CMD-SHIFT-K) करें ।
  3. Xcode फ़ाइलों को संकलित करने के लिए प्रोजेक्ट बनाएँ । इसके अलावा, यदि आवश्यक हो तो इसे इंडेक्स फाइल करने दें।

एक साइड नोट पर, मुझे यकीन नहीं है कि यह मदद करता है लेकिन मैंने उपरोक्त चरणों (Xcode प्राथमिकताएं - स्थान) के प्रदर्शन से पहले व्युत्पन्न डेटा को हटा दिया है


2

StoryBoard में ViewController का चयन करें, दाएँ हाथ के पैनल में मौजूदा मूल्य हटाएं / "ग्राहक वर्ग" / "वर्ग" फिर नियंत्रण वर्ग जोड़ें (प्रकार: "नमूना दृश्य नियंत्रक" ...), दर्ज करें। -> वह काम मेरे लिए


2

मैंने इन सभी उत्तरों की कोशिश की, मेरे लिए समस्या एक्सकोड से संबंधित थी जो फाइलों को अनुक्रमित करने में सक्षम नहीं थी। मैंने इसे केवल Xcode को छोड़ने और परियोजना को फिर से खोलने के द्वारा तय किया। बेशक मैंने उपरोक्त सभी समाधानों को आजमाने के बाद किया था: पी


2

उत्पाद> क्लीन (कमांड - शिफ्ट - के) ने इसे मेरे लिए तय किया!


2

यह EASIEST कदम है जो मैंने इस समस्या को ठीक करने के लिए किया था।

  1. मैं प्रोजेक्ट को साफ करता हूं
  2. व्यू कंट्रोलर में एक नया बटन खींचें।
  3. प्रोजेक्ट बनाएं।
  4. नव खींचे गए बटन को कक्षा से कनेक्ट करें (या तो आउटलेट या क्रिया)।
  5. फिर वॉयला !!! अन्य आउटलेट्स को अब फिर से क्लास से जोड़ा जा सकता है!

1

मेरे परीक्षण के अनुभव के रूप में, यदि आप एक वर्ग को हटाते हैं जो Xcode में जुड़ा हुआ था, और इस मुद्दे की तुलना में फिर से फ़ाइल जोड़ देगा।


1

आमतौर पर जब मेरे साथ ऐसा होता है तो मैंने अभी तक क्लास के लिए कोड सेव नहीं किया है। कोड पर बस हॉप करें और cmd + s को हिट करें और यह अक्सर समस्या को सही तरीके से ठीक करता है।



1

ऊपर दिए गए किसी भी कदम ने मेरे लिए काम नहीं किया, लेकिन मुझे लगता है कि मैंने इस मुद्दे की खोज की होगी। कम से कम यह मेरे लिए काम किया है, और यह Xcode में बग नहीं है।

जब सहायक संपादक में खिड़की के शीर्ष पर देखो जो आपके viewController के लिए कोड है। सही संभावना से तीसरा विकल्प "मैनुअल" कहता है, लेकिन इसे "स्वचालित" कहना चाहिए। एक बार मैंने इसे बदल दिया, समस्या हल हो गई!


1

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


1

मैंने हर कोशिश की!

सुनिश्चित करें कि आपके UIViewController के वर्ग का नाम "टेस्ट" शब्द में नहीं है

बग रिपोर्ट प्रस्तुत की गई।


निश्चित रूप से यह नहीं कह रहा है कि यह एकमात्र कारण है। बस इतना है कि इस बारे में पता होना एक और बात है।
हारून क्रेप

मेरे लिए सभी व्युत्पन्न डेटा, स्वच्छ परियोजना को हटाने में मदद करें। लेकिन यह बग है और आप सही हैं।
जिनेविओस

0

मैं प्रश्न में .m और .h फ़ाइलों का रीमेक बनाने का प्रयास करूंगा और उन्हें एक मूल नाम दूंगा, न कि "ViewController" जैसा सामान्य। उस फ़ाइल के लिए आप क्या करना चाहते हैं, और व्यू कंट्रोलर (यानी "पिज़्ज़ाडेकरटोर व्यू कॉन्ट्रोलर") की समाप्ति पर कुछ और आज़माएँ।

फिर ViewController का चयन करें जिसे आप उन फ़ाइलों से कनेक्ट करना चाहते हैं। सुनिश्चित करें कि आप ViewController का चयन करें, न कि केवल एक वस्तु के भीतर। सबसे नीचे काली पट्टी पर क्लिक करें (जिसमें "प्रथम प्रतिसाददाता" और "बाहर निकलें" आइकन हैं)। पूरे ViewController नीले रंग की रूपरेखा चाहिए। इसके बाद आइडेंटिटी इंस्पेक्टर में कस्टम क्लास सेक्शन में जाएं और आपको पहले फील्ड में एक ग्रे आउट "UIViewController" दिखना चाहिए। उस फ़ील्ड में, .h या .m फ़ाइल के नाम से टाइप करें जिसे आप इसे कनेक्ट करना चाहते हैं (पिज़्ज़ा टाइपिंग प्रारंभ करें ... और यह एक छोटी सी ऑटो-पूर्ण चीज़ करनी चाहिए)। फिर एंटर मारा।

जब आप सहायक संपादक को खोलते हैं, तो सुनिश्चित करें कि आप जिस फ़ाइल को खींचने और छोड़ने की कोशिश कर रहे हैं, वह वास्तव में सही फ़ाइल है।

यदि आपने ऊपर बताए अनुसार सब किया है, तो यह काम करना चाहिए।


अभी भी काम नहीं करता है, दुर्भाग्य से। मैंने बिना किसी लाभ के पहले ऐसा करने की कोशिश की है। यहाँ एक स्क्रीनशॉट है: i.imgur.com/5ixtcps.png
user2597451

हुह। अजीब। प्रोग्रामेटिक रूप से उन्हें जोड़ने का प्रयास करें (यानी @property (nonatomic, strong) IBOutlet UIView * परीक्षण;) और फिर जब छोटा चक्र इसके बगल में दिखाई दे, तो अपने UIView को खींचें और छोड़ें।
कैप्टक जूल

यह काम करता है और हमेशा होता है (और एप्लिकेशन ठीक से चलने लगते हैं), लेकिन मैं इस समस्या को हल करने की कोशिश कर रहा हूं कि यह स्वचालित रूप से नहीं जोड़ा जाएगा।
user2597451

ठीक है, अगर यह उस तरह काम करता है, तो इसे दूसरे तरीके से काम करना चाहिए। अपने XCode में बग? एक पिछला संस्करण (जैसे 4.6.2 या कुछ और) प्राप्त करने का प्रयास करें और इसे स्थापित करें। अन्यथा,
ओम्म्म्म्म्म्म्म्म्म्म्म्म्म्म्म्म

हाँ, यही मैं डरता हूँ। स्थापना रद्द करना और पुन: स्थापित करना काम नहीं कर रहा है, मुझे उम्मीद थी कि मैं एक गलती कर रहा था। Xcode की मेरी कॉपी को डाउनग्रेड करने का सबसे अच्छा तरीका क्या है?
user2597451

0

जैसा कि मैंने @ क्रिसहिसन के जवाब पर टिप्पणी की, उन चीजों ने मेरे लिए काम नहीं किया, लेकिन व्युत्पन्न डेटा को हटाने के रूप में मैंने इसे प्राप्त डेटा को काम करने के लिए https://stackoverflow.com/a/16182672/147757 पर हटा दिया।


0

फ़ाइलें (केवल संदर्भ) हटाएं और फ़ाइलों को फिर से जोड़ें।


0

वैसे मेरे मामले में, यह काम किया (यह एक अजीब बात है, लेकिन काम किया) निम्नलिखित है:

एक डेटा स्रोत (उदाहरण के लिए UCableViewDataSource जैसे ViewController के लिए एक एक्सटेंशन) को जोड़ने का प्रयास करें। Xcode ViewController को फिर से लोड करने का प्रयास करेगा। फिर मैंने प्रोटोकॉल की कुछ विधि लिखी (शुरुआत में Xcode ने तरीकों को स्वत: पूर्ण नहीं किया, लेकिन इसे मैन्युअल रूप से लिखा), फिर मैंने IBOutlets को जोड़ा, और फिर अंत में, मैंने डेटासोर्स को हटा दिया।

उदाहरण:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

0

मेरे लिए, मैंने जिस दृश्य वर्ग को निर्दिष्ट किया था, वह इंटरफ़ेस बिल्डर द्वारा संकलित करने में विफल रहा था। इसे चिह्नित किया गया था@IBDesignable

निकालना @IBDesignable, और फिर मेरे आउटलेट जोड़ना, और फिर इसे चिह्नित करना @IBDesignableमेरे मामले में समस्या को हल करना।


0

बस प्रोजेक्ट के लिए व्युत्पन्न डेटा को हटाने का प्रयास करें


0

बस यह कोशिश करो

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.