gpt4 book ai didi

objective-c - NSScreenNumber 变化(随机)?

转载 作者:太空狗 更新时间:2023-10-30 03:53:30 25 4
gpt4 key购买 nike

在我的应用程序中,我需要区分不同的显示,这是通过使用 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"];
}

获取一个整数:

 // Assuming screen points to an instance of NSScreen
NSLog(@"Screen ID: %i", [[screen uniqueScreenID] intValue]);

这开始令人沮丧,感谢任何帮助/想法,谢谢!

最佳答案

对于具有内置显卡和独立显卡的 Mac(例如具有板载 Intel 显卡和独立显卡的 MacBook Pro 型号),当系统自动在两者之间切换时,显示器 ID 会发生变化。您可以在 Energy Saver prefs 面板中禁用“Automatic graphics switching”,以测试这是否是您屏幕编号变化的原因(禁用时,将始终使用独立显卡)。

在此类系统上,选择在特定时间使用哪些图形取决于当前正在运行的应用程序及其需求。例如,我相信应用程序对 OpenGL 的任何使用都会导致切换到独立显卡。

如果您需要在应用程序运行时注意到此类切换何时发生,您可以注册回调(CGDisplayRegisterReconfigurationCallback)并检查发生的更改(kCGDisplayAddFlag、kCGDisplayRemoveFlag 等)。如果您尝试将显示器与以前使用/遇到的显示器相匹配,您需要做的不仅仅是比较显示器 ID。

关于objective-c - NSScreenNumber 变化(随机)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com