找不到协议NSApplicationDelegate

时间:2010-09-11 07:17:44

标签: objective-c macos

据我所知,SDK {10}中提供了NSApplicationDelegate

是否有与NSApplicationDelegate类似的协议用于ealier版本(我的是10.5.8)?

感谢 InterDev中

1 个答案:

答案 0 :(得分:5)

功能上,是的。但正式而言,没有。

关键是,Objective-C 2.0之前的协议没有可选方法的概念。因此,使用了一种名为informal protocol的东西。基本上,头文件只是将一个类别添加到NSObject,如

@interface NSObject (NSApplicationDelegate)
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
....
@end

这样,当您在任意对象上调用委托方法时,编译器不会警告您。现在它被正式化为正式协议:

@protocol NSApplicationDelegate
@optional
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
....
@end

当您实现应用程序委托时,差异将在10.5之前,而在此之前

@interface YourAppDelegate:NSObject {
...
}
@end

而你将在10.6及更高版本中使用

@interface YourAppDelegate:NSObject<NSApplicationDelegate> {
...
}
@end

因此,正如您在documentation for NSApplicationDelegate中发现的那样,协议在10.6中正式化,但之前没有形式化。但是,自10.0以来,功能一直存在。

Cocoa世界变化很快,文档往往只描述最新版本,所以如果可能,我建议你升级到10.6。这样可以节省大量的毛发刮伤时间,特别是如果你是初学者的话。