2012-01-24 34 views
9

所以我已经对这个问题做了一些研究,但我还没有发现任何类似的东西......“找不到NSObject的接口声明”?

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

如果任何人有任何意见,那将是非常赞赏。 :)

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

+4

听起来像基金会不以某种方式导入。尝试在您的prefix.pch中添加'#import '来查看它是否清除了警告。 –

+0

刚刚签出Application_Prefix.pch - 它已经在那里,以及和“Sparrow.h”O.o –

+1

基金会列在您的框架文件夹?你在目标设置中链接到它吗? –

回答

37

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

时foo.h中#imports“bar.h”和bar.h #imports“foo.h中”可能发生这种情况(或有时其的三个或更多的头文件中的圆导入彼此链)和它导致像你所看到的虚假错误。

解决的办法是尽量避免在您的.h文件导入头,而是使用在.h文件@class外部类的引用,并把#imports在.m文件来代替。因此,而不是写:

#import "SomeClass.h" 

在您的.h文件,尽可能地说:

@class SomeClass; 

在您的.h文件中,并把#import语句在.m文件来代替。

+1

嗨,我给了这个镜头,它似乎是做这些错误的绝招,谢谢!这很奇怪,我检查了循环引用,似乎没有任何我能看到的...此外,似乎还有一些遗留下来(我们已经从20多个错误下降到5),但我会继续努力的。再次感谢:) –

4

尝试删除导出的数据的项目。您可以通过项目中的组织者完成此项任务。你可能有一个损坏的预编译头。

+0

刚刚尝试过,虽然它不会让我删除任何派生的数据。按钮变灰了,所以我猜测首先没有? –

+1

好的,那可能不是那么回事,但为了以防万一,请转到'/ Users//Library/Developer/Xcode/DerivedData'并找到项目文件夹,并将其删除。如果你不确定哪一个是正确的,那么删除这里的所有文件夹是安全的,Xcode只需要重新编译你的源文件。 – joerick

+0

去看看,但没有数据在那里开始。这有点神秘! –

0

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

64

这可以通过不包括UIKit中引起的。

添加到您的标题:

#include <UIKit/UIKit.h> 

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

+2

看来新的Xcode默认不包含UIKit框架。 –

+2

是的,这对Xcode 6和iOS 8+ SDK非常重要。 – Danoli3

+0

您节省了我的时间,非常感谢:)) – mychar

7

尝试此代替Cocoa或iOS应用程序,请确保导入“Foundation/Foundation.h”你在继承NSObject类。

0

还要确保你没有包含.cpp.c文件中的Objective-C文件。

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

如果您可以避开它,解决方案将使用#ifdef __OBJC__

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