在prefPane之外设置CFPreferences

时间:2014-07-31 10:15:19

标签: objective-c macos cfpreferences

我正在尝试构建一个像这样设置CFPreferences的应用程序:

CFPreferencesSetValue((CFStringRef)@"AppleInterfaceStyle", NULL, kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);

然后发布通知让系统知道它已被更改。

CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(), (CFStringRef)@"AppleInterfaceThemeChangedNotification", NULL, NULL, YES);
    [defaults setObject:@"light" forKey:@"interfaceStyle"];

我在普通的Mac应用程序中尝试了这个并且它不起作用,但是如果我把它放在prefPane中它就可以了。有没有人有任何指示?

这是Yosemite特有的,并将主题设置为浅色(更改菜单栏和停靠栏)。

1 个答案:

答案 0 :(得分:0)

将通知代码包装在dispatch_async中为我工作。不知道为什么会这样。

dispatch_async(dispatch_get_main_queue(), ^{ CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(), (CFStringRef)@"AppleInterfaceThemeChangedNotification", NULL, NULL, YES); });