【问题标题】:XCode Throwing Errors @implementationXCode 抛出错误@implementation
【发布时间】:2011-08-03 12:52:00
【问题描述】:

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

我有一个不久前做的项目,对我来说效果很好,但是,当我尝试复制上次的结果时,我遇到了很多错误。

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

在 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 在尝试编译时遇到了什么问题,我没有看到任何合理的 '(' 位置,而且我认为我没有留下任何未识别的东西。

任何帮助将不胜感激。

【问题讨论】:

    标签: objective-c xcode implementation


    【解决方案1】:

    那是因为那不是有效的 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 在“新建文件”面板中提供了一个模板,用于创建某些 Cocoa 类的子类;您的 AppDelegate 应该是 NSObject 的子类,并且还为 NSView、NSDocument、UIView、UIViewController 等提供了模板。模板创建的文件已经具有正确的扩展名。

    【讨论】:

    • 哇,太棒了。您不仅告诉我如何解决我的问题,还告诉我出了什么问题,将来如何预防,并给出了一些很好的建议。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多