2011-12-28 3 views
4

내 애플리케이션에서는 NSScreen에서 제공하는 deviceDescription 사전의 NSScreenNumber 키를 사용하여 다른 디스플레이를 구별해야합니다. 지금까지 모든 것이 완벽하게 작동했지만 갑자기 내 메인 스크린에 다른 화면 ID가 표시되는 경우가 있습니다 (랩탑이며 수개월 만에 두 번째 스크린이 부착되지 않고 항상 동일한 하드웨어). id는 69676672 였지만 지금은 대부분 2077806975가됩니다.NSScreenNumber가 (임의로) 변경됩니까?

처음에 NSNumber를 어떻게 든 오해 할 수도 있다고 생각했지만, 그럴 것 같지 않습니다. 또한 CGMainDisplayID를 사용하여 검사했습니다.() 함수와 나는 같은 값을 얻는다. 심지어 더 이상한 것은 애플 애플리케이션 중 일부가 여전히 이전 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

컴퓨터가 절전 모드에서 깨어날 때 디스플레이가 다시 열거되기 때문에 투표 사이에 잠자기 모드로 들어갔습니까? –

+0

예 기계는 두 번 투표 사이에 여러 번 재부팅되었습니다. 그리고 그 값은 예고없이 변경 될 수 있음을 알고 있습니다 (자주 발생하지 않아야 함에도 불구하고 문서에서 그렇게 말합니다). 나에게 혼란스러운 점은 API를 사용하는 타사 앱이 Apple 소프트웨어 (예 : Dock의 데스크탑 이미지 관리 부분)가 이전 값을 얻는다는 것입니다. 하지만 그들은 다른쪽으로 캐싱을하거나 다른 API를 사용해야합니다. – Robin

+0

Apple, Robin과 관련된 버그입니다. – valexa

답변

2

내장 그래픽 및 별도 그래픽 카드 (예 : 온보드 Intel 그래픽 및 별도 그래픽 카드가있는 MacBook Pro 모델)의 경우 시스템이 자동으로이 두 가지를 전환 할 때 디스플레이 ID가 변경 될 수 있습니다. 에너지 절약 환경 설정 패널의 "자동 그래픽 전환"을 비활성화하여 이것이 화면 번호 변경의 원인인지 여부를 테스트 할 수 있습니다 (비활성화 된 경우 항상 별도 그래픽 카드 사용).

이러한 시스템에서 특정 시간에 사용중인 그래픽의 선택은 현재 실행중인 응용 프로그램과 필요에 따라 달라집니다. 응용 프로그램에서 OpenGL을 사용하면 분리 된 그래픽 카드로 전환 될 수 있다고 생각합니다.

응용 프로그램이 실행되는 동안 이러한 전환이 발생할 때 알아야 할 경우 콜백 (CGDisplayRegisterReconfigurationCallback)을 등록하고 발생하는 변경 사항 (kCGDisplayAddFlag, kCGDisplayRemoveFlag 등)을 검사 할 수 있습니다. 이전에 사용되었거나 사용 된 것과 일치하는 디스플레이를 찾으려면 디스플레이 ID를 비교하는 것 이상의 작업이 필요합니다.

+0

아, 이것은 많은 의미가 있습니다. 결코 그것에 대해 생각하지 않았습니다. 실제로 NSScreenNumber에 더 이상 의존하지 않기 위해 실제로 시스템을 변경했습니다.하지만 다시 돌아 가야 할 경우 유용한 힌트입니다. 덕분에 많은 도움이되었습니다. – Robin

관련 문제