Objective c Obj-C-以编程方式将NSWindow外观设置为NSAppearanceNameVibrantDark,不起作用

Objective c Obj-C-以编程方式将NSWindow外观设置为NSAppearanceNameVibrantDark,不起作用,objective-c,macos,xcode9,theming,programmatically,Objective C,Macos,Xcode9,Theming,Programmatically,使用XCode 9.4.1版(9F2000),我想动态地允许用户将Mac应用程序的主题从浅色改为深色等,但我遇到了第一个障碍 我尝试将以下代码放入ApplicationIDFinishLaunching和ViewController的viewDidLoad方法中,但都没有导致主题更改为暗主题 NSAppearance* appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]; [self.window

使用XCode 9.4.1版(9F2000),我想动态地允许用户将Mac应用程序的主题从浅色改为深色等,但我遇到了第一个障碍

我尝试将以下代码放入
ApplicationIDFinishLaunching
和ViewController的
viewDidLoad
方法中,但都没有导致主题更改为暗主题

NSAppearance* appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];
    [self.window setAppearance:appearance];
我找不到一个苹果的示例来演示如何通过编程实现这一点。有人能指出我忽略了什么吗


D.

我可以通过将代码移动到控制器的
视图来让它工作(根据下面的示例)。那么所有的主题都是正确的

- (void)viewWillAppear {
    [super viewWillAppear];

    NSAppearance* appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];
    [self.view.window setAppearance:appearance];
}

您的代码在macOS 10.13.6 for me上的Xcode 9.4.1中的一个全新的非文档项目中运行得非常完美,该项目在
ApplicationIDFinishLaunching
中执行,并与10.13 SDK链接。你能试试同样的吗?如果它起作用,那么代码中会发生其他事情。