18

所以我对这个问题做了一些研究,但我还没有发现任何类似的东西......

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

如果有人有任何建议,将不胜感激。:)

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

4

7 回答 7

69

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

将此添加到您的标题中:

#include <UIKit/UIKit.h>

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

于 2014-11-24T03:02:47.743 回答
48

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

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

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

#import "SomeClass.h"

在您的 .h 文件中,尽可能放置:

@class SomeClass;

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

于 2012-01-25T01:50:07.777 回答
8

为 Cocoa 或 iOS 应用程序尝试这个,确保在你继承 NSObject 类的类中导入“Foundation/Foundation.h”。

于 2015-08-12T21:19:51.653 回答
4

尝试删除项目的派生数据。您可以通过组织者在项目下做到这一点。您可能有一个损坏的预编译头文件。

于 2012-01-24T23:29:44.090 回答
2

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

在我的foo.m档案中,我忘记了#import "foo.h"

当我添加导入行时,错误得到了修复。

于 2018-05-04T06:16:36.490 回答
0

确保您没有使用已被占用的类名。当我将我的一个类命名为“信号”时,我遇到了同样的问题,它已经是 Foundation 的一部分。

于 2012-08-16T20:51:49.940 回答
0

还要确保您没有包含来自.cppor文件的 Objective-C.c文件。

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

#ifdef __OBJC__如果您可以摆脱它,则可以使用一个解决方案。

否则在文件的属性面板中指定.cpp文件类型Objective-C++ Source(右上角的窗口控件=>“身份和类型”)

于 2017-12-12T13:47:52.787 回答