在我的应用程序中,我需要区分不同的显示,我使用NSScreen提供的deviceDescription字典的NSScreenNumber键。到目前为止,一切都完美无瑕,但现在突然间我有时会为我的主屏幕获得不同的屏幕ID(这是一台笔记本电脑,我几个月没有连接第二个屏幕,它总是相同的硬件)。 id曾经是69676672,但现在大部分时间我都是2077806975。
起初我以为我可能会以某种方式误解NSNumber,但情况似乎并非如此,我还通过使用CGMainDisplayID()函数进行检查,并得到相同的值。甚至更奇怪的是,一些Apple应用程序似乎仍然得到旧ID:例如。使用屏幕ID在其配置文件中引用桌面映像,在更新桌面映像时,Apple的桌面映像应用程序使用“正确”(=旧)ID。
我开始怀疑最近的更新(10.7.1或10.7.2)是否会发生变化导致变更,是否有其他人注意到类似的事情或之前遇到此问题?
以下是我使用的代码:
// This is in an NSScreen category
- (NSNumber *) uniqueScreenID {
return [[self deviceDescription] objectForKey:@"NSScreenNumber"];
}
获得一个int:
// Assuming screen points to an instance of NSScreen
NSLog(@"Screen ID: %i", [[screen uniqueScreenID] intValue]);
这开始变得令人沮丧,感谢任何帮助/想法,谢谢!
答案 0 :(得分:3)
对于具有内置图形和独立显卡的Mac(例如带有板载Intel图形和独立显卡的MacBook Pro型号),当系统自动在两者之间切换时,显示ID可能会发生变化。您可以在Energy Saver prefs面板中禁用“自动图形切换”,以测试这是否是屏幕编号更改的原因(禁用时,将始终使用独立显卡)。
在此类系统上,选择在特定时间使用的图形与当前运行的应用程序及其需求相关联。我相信应用程序使用OpenGL会导致切换到独立显卡。
如果您需要注意在应用程序运行时何时发生此类切换,您可以注册回调(CGDisplayRegisterReconfigurationCallback)并检查发生的更改(kCGDisplayAddFlag,kCGDisplayRemoveFlag等)。如果您正在尝试将显示器与之前使用/遇到的显示器匹配,则需要超越仅比较显示器ID。