所以我对这个问题做了一些研究,但我还没有发现任何类似的东西......
所以我正在使用 Xcode 和 Sparrow Framework 在 Obj-C 中编写游戏。到目前为止,我一直在开发模拟器,一切都很顺利。但是,当我切换到在我的设备上运行它时,我会收到各种应该是标准的错误,例如“找不到 NSObject 的接口声明”、“未知类型名称‘NSMutableArray’”等。我已经在每个类中添加了#import,所以你会认为它不应该发生,对吧?我感觉只是一两行需要在某个地方改变 - 但我不知道什么或在哪里。
如果有人有任何建议,我们将不胜感激。 :)
编辑:这是出现错误的 .h 文件之一的屏幕截图 - 它似乎只存在于我创建的某些 .h 文件中。 https://i.sstatic.net/H04mE.png
这可能是由于不包含 UIKit 导致的。
将此添加到您的标题中:
#include <UIKit/UIKit.h>
还要确保将 UIKit 框架添加到您的项目中。 (目标/构建阶段/将二进制文件与库链接/ -- 选择添加 --- 添加 UIKit.Framework)
听起来您的头文件之一中可能有循环引用。
当 foo.h #imports "bar.h" 和 bar.h #imports "foo.h" (或者有时它是由三个或更多头文件组成的链,相互导入成一个圆圈)时,可能会发生这种情况,并导致虚假的结果像您所看到的那样的错误。
解决方案是尽量避免在 .h 文件中导入标头,而是在 .h 文件中对外部类使用 @class 引用,并将 #imports 放在 .m 文件中。所以不要写:
#import "SomeClass.h"
在您的 .h 文件中,尽可能放置:
@class SomeClass;
在您的 .h 文件中,并将 #import 语句放入您的 .m 文件中。
对于 Cocoa 或 iOS 应用程序尝试此操作,确保在继承 NSObject 类的类中导入“Foundation/Foundation.h”。
尝试删除项目的派生数据。您可以通过组织者在项目下执行此操作。您可能有一个损坏的预编译头。
我遇到了类似的错误,当我发现我做了一些非常愚蠢的事情时解决了它。
在我的
foo.m
文件中,我忘记了#import "foo.h"
当我添加导入行时,错误得到修复。
确保您不使用已使用的类名。当我将我的一个类命名为“Signal”时,我遇到了同样的问题,它已经是 Foundation 的一部分。
还要确保您没有包含来自
.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
(右上角窗口控件 =>“身份和类型”)
这种非法虐待和严重骚扰仍在继续,只是因为我持有显示您和 GitHub 如何真实工作的文件,而这是可悲的犯罪和暴力行为,以某种方式自然地成为您的一部分