2012-01-24 10 views
9

इसलिए मैंने इस मुद्दे में कुछ शोध किया है, लेकिन मुझे अभी तक कुछ भी नहीं मिला है ..."NSObject के लिए इंटरफ़ेस घोषणा नहीं मिल सका"?

तो मैं एक्सकोड और स्पैरो फ्रेमवर्क का उपयोग करके ओब्जे-सी में एक गेम कोडिंग कर रहा हूं। मैं इस बिंदु तक सिम्युलेटर पर काम कर रहा हूं, और यह सब ठीक हो रहा है। लेकिन जब मैं इसे अपने डिवाइस पर चलाने के लिए स्विच करता हूं, तो मुझे उन चीज़ों के लिए सभी प्रकार की त्रुटियां मिलती हैं जो मानक होना चाहिए, उदा। "NSObject के लिए इंटरफ़ेस घोषणा नहीं मिल सकती", "अज्ञात प्रकार का नाम 'एनएसएमयूटेबलएरे' 'आदि। मुझे पहले से ही प्रत्येक कक्षा में # आयात मिल गया है, इसलिए आपको लगता है कि यह नहीं होना चाहिए, है ना? मुझे यह महसूस हो रहा है कि यह सिर्फ एक पंक्ति या दो है जिसे कहीं बदलने की जरूरत है - लेकिन मुझे कोई संकेत नहीं मिला है कि कहां या कहाँ है।

यदि किसी के पास कोई सलाह है, तो इसकी बहुत सराहना की जाएगी। :)

संपादित करें: यहां एक .h फाइलों में से एक का स्क्रीनशॉट है जो त्रुटियां देता है - ऐसा लगता है कि मैंने केवल कुछ .h फाइलों में बनाया है। http://i.imgur.com/EuQh4.png

+4

ध्वनि फाउंडेशन किसी भी तरह आयातित नहीं किया जाता। यह देखने के लिए कि क्या यह चेतावनियों को साफ़ करता है, यह देखने के लिए अपने prefix.pch पर '#import 'जोड़ने का प्रयास करें। –

+0

बस एप्लिकेशन_Prefix.pch की जांच की - यह पहले से ही और "Sparrow.h" ओ.ओ –

+1

के साथ है, क्या आपके ढांचे फ़ोल्डर में फाउंडेशन सूचीबद्ध है? क्या आप इसे अपनी लक्षित सेटिंग्स में जोड़ रहे हैं? –

उत्तर

37

ऐसा लगता है कि आपके पास अपनी शीर्ष लेख फ़ाइलों में से एक में गोलाकार संदर्भ हो सकता है।

यह तब हो सकता है जब foo.h #imports "bar.h" और bar.h #imports "foo.h" (या कभी-कभी तीन या अधिक शीर्षलेख फ़ाइलों की एक श्रृंखला सर्कल में एक-दूसरे को आयात करती है) और यह आप जो देख रहे हैं उसकी तरह नकली त्रुटियों की ओर जाता है।

समाधान आपकी .h फ़ाइलों में शीर्षलेख आयात करने से बचने का प्रयास करना है, और इसके बजाय .h फ़ाइलों में बाहरी कक्षाओं के लिए @class संदर्भों का उपयोग करें और इसके बजाय .m फ़ाइलों में #imports डालें। तो बजाय लेखन की:

#import "SomeClass.h" 

अपने ज फ़ाइलों में, जब भी संभव हो पुट:

@class SomeClass; 

अपने ज फ़ाइल में नहीं, बल्कि आपका मीटर फ़ाइल में #import बयान डाल दिया।

+1

हाय, मैंने इसे एक शॉट दिया, और ऐसा लगता है कि इनमें से अधिकांश त्रुटियों के लिए चाल है, धन्यवाद! हालांकि यह अजीब बात है, मैंने सर्कुलर संदर्भों की जांच की और ऐसा कोई प्रतीत नहीं हुआ जो मैं देख सकता था ... इसके अलावा, अभी भी कुछ बाएं लगते हैं (हम 20+ त्रुटियों से 5 तक नीचे गए हैं) लेकिन मैं इसे रखूंगा। धन्यवाद फिर से :) –

4

प्रोजेक्ट के लिए व्युत्पन्न डेटा हटाने का प्रयास करें। आप परियोजनाओं के तहत आयोजक के माध्यम से ऐसा कर सकते हैं। आपके पास भ्रष्ट प्रीकंपील्ड हेडर हो सकता है।

+0

बस कोशिश की, हालांकि यह मुझे किसी भी व्युत्पन्न डेटा को हटाने नहीं देगा। बटन गहरा हुआ है, तो मुझे लगता है कि वहां पहली जगह नहीं है? –

+1

ठीक है, तो यह तब नहीं हो सकता है, लेकिन बस मामले में, '/ उपयोगकर्ता//लाइब्रेरी/डेवलपर/एक्सकोड/व्युत्पन्न डेटा 'पर जाएं और प्रोजेक्ट फ़ोल्डर ढूंढें और इसे हटा दें। यदि आप सुनिश्चित नहीं हैं कि कौन सा सही है, तो सभी फ़ोल्डरों को यहां हटाना सुरक्षित है, एक्सकोड को केवल आपकी स्रोत फ़ाइलों को फिर से एक्सचेंज करना होगा। – joerick

+0

इसे देखने के लिए गए, लेकिन वहां से शुरू करने के लिए वहां कोई डेटा नहीं था। यह एक रहस्य का थोड़ा सा है! –

0

सुनिश्चित करें कि आप पहले से ही लिया गया क्लास नाम का उपयोग नहीं करते हैं। मुझे एक ही समस्या है जब मैंने अपनी कक्षाओं में से एक "सिग्नल" नाम दिया, जो पहले से ही फाउंडेशन का हिस्सा है।

64

यह UIKit सहित नहीं हो सकता है।

आपके शीर्षक को यह करें:

#include <UIKit/UIKit.h> 

इसके अलावा अपने प्रोजेक्ट के लिए UIKit रूपरेखा जोड़ना सुनिश्चित करें। (लक्ष्य/निर्माण चरणों/पुस्तकालयों के साथ लिंक बाइनरी/- जोड़ें जोड़ें --- UIKit.Framework जोड़ें)

+2

ऐसा लगता है कि नया एक्सकोड डिफ़ॉल्ट रूप से UIKit ढांचे को शामिल नहीं करता है। –

+2

हाँ यह एक्सकोड 6 और आईओएस 8+ एसडीके के लिए बहुत महत्वपूर्ण है। – Danoli3

+0

आप मेरा समय बहुत बचाते हैं;) – mychar

7

इसके बजाय कोको या आईओएस ऐप के लिए आज़माएं, अपनी कक्षा में "फाउंडेशन/फाउंडेशन एचएच" आयात करना सुनिश्चित करें जहां आप एनएसओब्जेक्ट कक्षा उत्तराधिकारी हैं।

0

यह भी सुनिश्चित करें कि आप .cpp या .c फ़ाइल से ऑब्जेक्टिव-सी फ़ाइल शामिल नहीं हैं।

उदाहरण: PhotoManager.mm में ऑब्जेक्टिव-सी जोड़ी PhotoObject.h/PhotoObject.mm से हेडर फ़ाइल शामिल हो सकती है। फिर, MyAwesomeCppFile.cpp में PhotoManager.h शामिल है, अचानक PhotoObject.h मूल उद्देश्य-सी कक्षाओं और कीवर्ड को नहीं जानता है।

यदि आप इससे दूर हो सकते हैं तो एक समाधान #ifdef __OBJC__ का उपयोग करना होगा।

अन्यथा (शीर्ष सही खिड़की नियंत्रण => "पहचान और प्रकार") फ़ाइल के गुण फलक में Objective-C++ Source रूप .cpp फ़ाइल प्रकार को नामित

संबंधित मुद्दे