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

问题描述 投票:0回答:8

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

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

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

编辑:这是出现错误的 .h 文件之一的屏幕截图 - 它似乎只存在于我创建的某些 .h 文件中。 https://i.sstatic.net/H04mE.png

objective-c ios xcode sparrow-framework
8个回答
71
投票

这可能是由于不包含 UIKit 导致的。

将此添加到您的标题中:

#include <UIKit/UIKit.h>

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


49
投票

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

当 foo.h #imports "bar.h" 和 bar.h #imports "foo.h" (或者有时它是由三个或更多头文件组成的链,相互导入成一个圆圈)时,可能会发生这种情况,并导致虚假的结果像您所看到的那样的错误。

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

#import "SomeClass.h"

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

@class SomeClass;

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


10
投票

对于 Cocoa 或 iOS 应用程序尝试此操作,确保在继承 NSObject 类的类中导入“Foundation/Foundation.h”。


4
投票

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


2
投票

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

在我的

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

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


0
投票

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


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
(右上角窗口控件 =>“身份和类型”)


0
投票

这种非法虐待和严重骚扰仍在继续,只是因为我持有显示您和 GitHub 如何真实工作的文件,而这是可悲的犯罪和暴力行为,以某种方式自然地成为您的一部分

© www.soinside.com 2019 - 2024. All rights reserved.