2012-07-31 4 views
10

많은 연구를했는데 찾고있는 것을 찾지 못했습니다. 현재 내 응용 프로그램의 Deployment TargetBase SDK10.8으로 설정되어 있으며 완벽하게 실행됩니다. Mountain Lions의 새로운 알림 센터에 알림을 올릴 수 있습니다!Mac OS 10.6에서 실행되며 NSUserNotificationCenter를 지원하는 응용 프로그램을 만드는 방법은 무엇입니까?

또한 Mac OS 10.6에서 실행되는 앱을 빌드하려면 배포 대상을 10.6으로 설정하고 빌드했습니다 (as recommended in this thread). 안타깝게도 앱이 10.6에서 충돌하고 충돌 보고서에 NSUserNotificationCenter를 찾을 수 없다는 내용이 상세히 표시됩니다 (OS 버전 처리 없음).

notificationCenterIsAvailable = (NSClassFromString(@"NSUserNotificationCenter")!=nil); 

을이 부울 플래그를 기반으로 운항합니다 : -

그래서 내가 반드시해야 할 일의 NSUserNotificationCenter 클래스가 존재하는지 여부를 확인하는 것입니다. 같은이 플래그를 기반으로 할 수없는

하지만 코드에 대한

:

  • 인터페이스 ..: <NSUserNotificationCenterDelegate> {
  • 또는 알림 센터에 대한 참조의 유형 : 클래스의 속성에 NSUserNotificationCenter *center?

내 생각은 런타임에 클래스 헤더를 동적으로 변경하는 것입니다. 즉, 클래스가 존재하는지 여부에 따라 Notificaion Center를 처리하기위한 메소드와 속성을 추가하는 것이지만 실제로는 복잡해 보입니다.

답변

3

이것은 컴파일 문제이며 기본 SDK가 10.8이면 항상 문제가되지 않습니다. center 포인터는 NSUserNotificationCenter이없는 경우 nil에 남아있을 수 있으므로 알림을 수신했는지 또는 테스트 후에 코드가 실행되지 않았는지 확인하기위한 플래그로 사용할 수 있습니다.

EDIT 사실을 남겨두면 확인하지 않아도됩니다. 정상적으로 메시지를 보내면 포인터가 nil 인 경우 메시지가 무시됩니다 (메시지 작성이 비싸지 않고 CPU주기를 절약하려는 경우가 아니면).

+0

그래서 'userNotificationCenter : (NSUserNotificationCenter *) center shouldPresentNotification :'과'(void) userNotificationCenter : (NSUserNotificationCenter *) center didActivateNotification :'같은 메소드를 컴파일러가 자동으로 지우는 것인가? – Raffael

+0

@Raffael 코드는 남아 있지 않지만 사용되지는 않습니다. – trojanfoe

+0

감사합니다! 최근의 충돌에는 또 다른 이유가 있었음에 틀림 없다. – Raffael