我有一个NSWindowController
,它有一个我在xib中子类化的窗口。直到10.10我将窗口作为子类(我们称之为WindowSubclassB),它是NSWindow的子类,并做了一些奇特的UI东西
现在有了Yosemite,我不再需要在Yosemite上继承我的窗口,但我仍然喜欢以前的OS X版本。
我虽然有几个不同的选项,例如为Yosemite和其他版本设置不同的.xib,但我的xib有很多部分,这意味着我必须维护两个不同的xib才能修复此
所以我试图做的是在构建时使用预处理器宏来确定要子类的哪个类
我试过了:
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10
@interface GFMOSXMainWindow : NSWindow
#else
@interface GFMOSXMainWindow : INAppStoreWindow
#endif
但是代码没有在Yosemite上执行,因为它不是MINIMUM要求
我想要实现的目标如下:
#if CURRENT_OSX_VERSION == OSX_VERSION_10_10
@interface WindowSubclassA : NSWindow
#else
@interface WindowSubclassA : WindowSubclassB
#endif
但是,我不会看到这样一个宏,它在构建时会告诉我应用程序的当前版本OS X是什么。
另外,如果有人只知道如何以编程方式告诉UIWindowController它的@property窗口应该被初始化为什么类,那么这可能会解决整个问题:)
提前致谢!
答案 0 :(得分:0)
您尝试执行的操作的问题在于,对于不同的系统版本,代码不会被多次编译。如果有的话,它可以针对不同的处理器进行不同的编译(例如OSX上的32/64位,或ios上的armv7,armv7和arm64)。 所以我认为以这种方式实现这一目标是不可能的。
我对替代解决方案还没有好主意,这不是使用objc运行时设置的一些狂野动态方法。
答案 1 :(得分:0)
NSWindowController initWithWindow:
会这样做,但您必须自己初始化NSWindow
。或者,您可以覆盖loadWindow
并致电self.setWindow = <custom window>
。
我不确定是否回答了您原来的问题,但它确实回答了您的“同样”问题。