"Не удается найти объявление интерфейса для NSObject"?
Итак, я провел некоторое исследование этой проблемы, но пока не нашел ничего подобного...
Итак, я кодирую игру в Obj-C, используя Xcode и Sparrow Framework. Я работаю над симулятором до этого момента, и все идет хорошо. Но когда я переключаюсь на запуск его на своем устройстве, я получаю всевозможные ошибки для вещей, которые должны быть стандартными, например. "Невозможно найти объявление интерфейса для NSObject", "Неизвестное имя типа" NSMutableArray "и т.д. У меня уже есть #import в каждом классе, так что вы думаете, что этого не должно быть, не так ли? У меня возникает ощущение, что это просто строка или две, которые где-то меняются, но я не знаю, что и где.
Если у кого-нибудь есть какие-либо советы, это будет очень признательно.:)
EDIT: вот скриншот одного из файлов .h, которые дают ошибки - кажется, только в некоторых .h файлах, которые я создал. http://i.imgur.com/EuQh4.png
Ответы
Ответ 1
Похоже, вы можете иметь круговую ссылку в одном из ваших файлов заголовков.
Это может произойти, когда foo.h #imports "bar.h" и bar.h #imports "foo.h" (или иногда его цепочка из трех или более файлов заголовков, импортирующих друг друга по кругу), и это приводит к ложным ошибкам, подобным тем, которые вы видите.
Решение заключается в попытке избежать импорта заголовков в ваши .h файлы и вместо этого использовать ссылки @class для внешних классов в файлах .h и вместо этого помещать #imports в .m файлы. Поэтому вместо написания:
#import "SomeClass.h"
В ваших .h файлах, когда это возможно, поставьте:
@class SomeClass;
В вашем файле .h и вместо этого поставьте оператор #import в свой .m файл.
Ответ 2
Это может быть вызвано не включением UIKit.
Добавьте это в свой заголовок:
#include <UIKit/UIKit.h>
Также не забудьте добавить UIKit Framework в свой проект. (Цели/Сборка фаз/Связывание двоичных с библиотеками /- Выберите Добавить --- Добавить UIKit.Framework)
Ответ 3
Попробуйте это вместо Cocoa или приложения iOS, обязательно импортируйте "Foundation/Foundation.h" в свой класс, где вы наследуете класс NSObject.
Ответ 4
Попробуйте удалить полученные данные для проекта. Вы можете сделать это через организатора в рамках проектов. Возможно, у вас есть коррумпированный прекомпилированный заголовок.
Ответ 5
Убедитесь, что вы не используете имя класса, которое уже выполнено. У меня была та же проблема, когда я назвал один из моих классов "Сигнал", который уже является частью Foundation.
Ответ 6
Также убедитесь, что вы не включаете файл Objective-C из файла .cpp
или .c
.
Пример: a PhotoManager.mm
может включать заголовочный файл из пары Objective-C PhotoObject.h
/PhotoObject.mm
.
Затем, если MyAwesomeCppFile.cpp
включает PhotoManager.h
, вдруг PhotoObject.h
не знает основные классы и ключевые слова Objective-C.
Решение заключалось бы в использовании #ifdef __OBJC__
, если вы можете с ним справиться.
В противном случае укажите тип файла .cpp
как Objective-C++ Source
в панели свойств файла (верхнее правое окно управления = > "Идентичность и тип" )