我的应用程序使用 following code :
#if MAC_OS_X_VERSION_10_5 < MAC_OS_X_VERSION_MAX_ALLOWED
NSArray *globalPreferencePanes =
NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory,
NSAllDomainsMask, YES);
#else
NSArray *globalPreferencePanes =
[NSArray arrayWithObjects:@"/Library/PreferencePanes",
[@"~/Library/PreferencePanes" stringByExpandingTildeInPath], nil];
#endif
return globalPreferencePanes;
我正在编译的项目针对的是 10.5 Mac OSX SDK,其中 NSPreferencePanesDirectory
不存在(它仅存在于 10.6+ 中)。因此,我有 #if
和 #else
来检查我们运行的 Mac OSX 版本,所以我知道是否应该使用 NSPreferencePanesDirectory
或者只是手动指定首选项 Pane 目录的位置。
我应该更改什么才能停止出现“使用未声明的标识符”错误?
谢谢。
最佳答案
#if
在编译时而不是运行时评估。您可能想要做的是使用当前的 SDK (10.7),并执行如下操作:
NSArray *globalPreferencePanes;
if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_6)
globalPreferencePanes = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSAllDomainsMask, YES);
else
globalPreferencePanes = [NSArray arrayWithObjects:@"/Library/PreferencePanes", [@"~/Library/PreferencePanes" stringByExpandingTildeInPath], nil];
return globalPreferencePanes;
确保将目标操作系统版本设置为 10.5,以便符号是弱链接的。否则,您可以下拉并使用 CoreServices 的 FSFindFolder()
:
NSMutableArray *globalPreferencePanes = [NSMutableArray array];
FSRef foundRef;
OSErr err = FSFindFolder(kLocalDomain, kPreferencePanesFolderType, false, &foundRef);
if (err != noErr) {
CFURLRef url = CFURLCreateFromFSRef(NULL, &fsRef);
CFStringRef path = CFURLCopyPath(url);
[globalPreferencePanes addObject:(id)path];
CFRelease(path);
CFRelease(url);
}
OSErr err = FSFindFolder(kUserDomain, kPreferencePanesFolderType, false, &foundRef);
if (err != noErr) {
CFURLRef url = CFURLCreateFromFSRef(NULL, &fsRef);
CFStringRef path = CFURLCopyPath(url);
[globalPreferencePanes addObject:(id)path];
CFRelease(path);
CFRelease(url);
}
return globalPreferencePanes;
(未测试)
关于objective-c - 修复 "Use of undeclared identifier ' NSPreferencePanesDirectory'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017353/