"Не удается найти объявление интерфейса для 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 в панели свойств файла (верхнее правое окно управления = > "Идентичность и тип" )