尽管到处搜索,我还是找不到问题的答案。那么让我们看看你们都有多好。 :)
我正在开发一个使用 NSPopover 的应用程序,该应用程序仅在 10.7 Lion 中可用,但我希望该应用程序能够针对 10.5 及更高版本进行编译。我正在使用预处理器指令来包装相关的弹出窗口代码,这似乎可以解决问题...但是,我仍然遇到错误的最后一个部分是 Interface Builder 中的 .zib。如何清除问题导航器中显示的错误“Class Unavailable: NSPopover on Mac OS X versions before 10.7”?
#ifdef __MAC_OS_X_VERSION_MAX_ALLOWED
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
@property (assign) IBOutlet NSPopover *popover;
}
#endif
#endif
上述内容适用于 xxx.h 和 xxx.m,但如何解决 .xib 错误?
尽管出现错误(红色),但仍成功构建。然而,我期望 10.7 功能(弹出窗口)在 10.7 中工作是错误的,因为它们不...我在这里缺少什么?
最佳答案
您不应为此使用预处理器,而应使用 NSClassFromString()
在运行时检查可用性。预处理器在编译时运行,因此它不会检测应用程序正在运行的系统。
创建三个 Nib ,10.5、10.6 和 10.7 各一个,然后加载您需要的 Nib (或在代码中执行),但在运行时而不是编译时选择哪个 Nib ,例如
MyVC *vc = nil;
if (NSClassFromString(@"NSPopover"))
{
vc = [NSViewController initWithNibName:@"MyVC-Lion" bundle:nil];
}
else if (/* check for 10.6+ only features */)
{
vc = [NSViewController initWithNibName:@"MyVC-SL" bundle:nil];
}
else
{
vc = [NSViewController initWithNibName:@"MyVC" bundle:nil];
}
// ...
关于objective-c - xib 中的预处理器指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668615/