找不到协议NSApplicationDelegate

ara*_*ide 0 macos objective-c

据我所知,NSApplicationDelegate适用于10.6的SDK

是否有与NSApplicationDelegateealier版本类似的协议(我的是10.5.8)?

谢谢interdev

Yuj*_*uji 5

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

关键是,Objective-C 2.0之前的协议没有可选方法的概念.因此,使用了一种称为非正式协议的东西.基本上,头文件只是增加了一个类别NSObject,如

@interface NSObject (NSApplicationDelegate)
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
....
@end
Run Code Online (Sandbox Code Playgroud)

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

@protocol NSApplicationDelegate
@optional
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
....
@end
Run Code Online (Sandbox Code Playgroud)

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

@interface YourAppDelegate:NSObject {
...
}
@end
Run Code Online (Sandbox Code Playgroud)

而你将在10.6及更高版本中拥有

@interface YourAppDelegate:NSObject<NSApplicationDelegate> {
...
}
@end
Run Code Online (Sandbox Code Playgroud)

因此,正如您在文档中NSApplicationDelegate找到的那样,协议在10.6中正式化,但之前没有形式化.但是,自10.0以来,功能一直存在.

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