“找不到NSObject的接口声明”?

时间:2012-01-24 22:04:37

标签: objective-c ios xcode sparrow-framework

所以我对这个问题进行了一些研究,但我还没有找到类似的东西......

所以我使用Xcode和Sparrow Framework在Obj-C中编写游戏。到目前为止,我一直在模拟器上工作,而且一切都很顺利。但是,当我切换到在我的设备上运行它时,我会得到各种错误,这些错误应该是标准的,例如: “无法找到NSObject的接口声明”,“未知的类型名称'NSMutableArray'”等等。我已经在每个类中都有#import,所以你会认为它不应该发生,对吧?我觉得这只是一两行需要改变的地方 - 但我不知道是什么或哪里。

如果有人有任何建议,我们将非常感激。 :)

编辑:这是一个给出错误的.h文件的屏幕截图 - 它似乎只出现在我创建的一些.h文件中。 http://i.imgur.com/EuQh4.png

7 个答案:

答案 0 :(得分:66)

这可能是由于不包括UIKit造成的。

将此添加到标题中:

#include <UIKit/UIKit.h>

还要确保将UIKit Framework添加到项目中。 (目标/构建阶段/链接二进制库/ - 选择添加---添加UIKit.Framework)

答案 1 :(得分:45)

听起来你的一个头文件中可能有一个循环引用。

这可能发生在foo.h #imports“bar.h”和bar.h #imports“foo.h”(或者有时它的三个或更多个头文件链在一个圆圈中互相导入)并且它导致像你所看到的那样虚假的错误。

解决方案是尽量避免在.h文件中导入标头,而是在.h文件中对外部类使用@class引用,而是将#imports放在.m文件中。所以不要写:

#import "SomeClass.h"

在你的.h文件中,只要有可能就把:

@class SomeClass;

在.h文件中,将#import语句放在.m文件中。

答案 2 :(得分:7)

尝试使用Cocoa或iOS应用程序,确保导入&#34; Foundation / Foundation.h&#34;在您继承NSObject类的类中。

答案 3 :(得分:4)

尝试删除项目的派生数据。您可以通过组织者在项目下完成此操作。您可能有一个损坏的预编译头。

答案 4 :(得分:2)

我遇到了类似的错误,当我注意到我做了一些非常愚蠢的事情时解决了它。

在我的foo.m文件中,我忘记了#import "foo.h"

添加导入行时错误得到修复。

答案 5 :(得分:0)

确保您不使用已经使用的类名。当我命名我的一个类“信号”时,我遇到了同样的问题,这已经是基金会的一部分。

答案 6 :(得分:0)

另外,请确保您没有包含.cpp.c文件中的Objective-C文件。

示例:PhotoManager.mm可能包含Objective-C对PhotoObject.h / PhotoObject.mm中的头文件。 然后,如果MyAwesomeCppFile.cpp包含PhotoManager.h,则突然PhotoObject.h不知道基本的Objective-C类和关键字。

如果您可以使用#ifdef __OBJC__,则可以使用.cpp

否则,请在文件的属性面板中将Objective-C++ Source文件类型指定为AVAILABLECARET(右上方窗口控件=&gt;“身份和类型”)