XCode投掷错误@implementation

时间:2011-08-03 12:52:01

标签: objective-c xcode implementation

我正在尝试学习使用XCode和Objective-C开发OS X应用程序的一些基础知识,但我已经遇到了问题。

我有一个项目,我从前一段时间做了很好,但是,当我尝试复制上次的结果时,我遇到了很多错误。

我有两个文件,一个名为“AppDelegate”的.c和一个.h

在AppDelegate.h中

    #import <Cocoa/Cocoa.h>
    #import <WebKit/WebView.h>

    @interface AppDelegate : NSObject {
        IBOutlet WebView *gameFrame;
    }

    @end

然后,在AppDelegate.c中:

    #import "AppDelegate.h"

    @implementation AppDelegate
    -(void)awakeFromNib
    {

    }
    @end

在IB中,有一个名为'AppDelegate'的NSObject,它的类是'AppDelegate'。

但是,当我尝试运行此功能时,我会收到 11734 错误...

当我点击XCode窗口底部的错误图标时,它列出了一堆似乎涉及NSStrings的代码,但我无法理解它......

另外,在我的代码中,

    @end
.c和.h中的

行突出显示错误说明:

'Expected identifier or '(' before '@' token.'

我不明白XCode在尝试编译时会绊倒什么,我没有看到任何合理的位置'('去'我不认为我留下任何未识别的东西。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

那是因为那不是有效的C代码。

你命名你的模块文件AppDelegate.c,它表明它包含用(或多或少)纯C编写的源代码。但它没有:你在Objective-C中编写了一个类接口和实现,这是C的超集(所有C都是有效的Objective-C,但并非所有Objective-C都是有效的C-特别是类,而不是类)。

为此,您必须将模块文件命名为AppDelegate.m(或其他任何内容,只要它以.m结尾;在类之后将其命名为值得遵循的约定)。 .m后缀表示用Objective-C编写的模块(通常包含类实现)。

因此,只需将模块文件从AppDelegate.c重命名为AppDelegate.m即可。确保在Xcode中执行此操作,而不是Finder:如果在Finder中执行此操作,Xcode将只关心不再存在名为AppDelegate.c的文件;它不会注意到重命名。

为了方便您创建将来的类,Xcode在“New File”面板中提供了一个模板,用于创建某些Cocoa类的子类;你的AppDelegate应该是NSObject的子类,并且还为NSView,NSDocument,UIView,UIViewController和其他一些提供了模板。模板创建的文件已经具有正确的扩展名。