我正在尝试学习使用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在尝试编译时会绊倒什么,我没有看到任何合理的位置'('去'我不认为我留下任何未识别的东西。
任何帮助都将不胜感激。
答案 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和其他一些提供了模板。模板创建的文件已经具有正确的扩展名。