2011-01-22 6 views
1

이 문제는 내 생산성을 죽이는 것이므로 누군가가 나를 도울 수 있기를 바랍니다. Mac 개발에 익숙하지 않은 경우에도 일주일에 한 번.Carbon Objective C++ 앱에서 Cocoa 델리게이트 사용

저는 기능을 추가하고자하는 Carbon 어플리케이션이 있습니다 : 파인더에서 더블 클릭 한 파일의 경로를 가져옵니다.

나는

  • 가 목표 C 호출을 허용하는 프로젝트를 수정했습니다.
  • 위임 객체를 설정하고 위임 객체에
  • - (BOOL)application:(NSApplication *)app openFile:(NSString *)filename 을 구현했습니다.

문제 : 파인더에서 파일을 두 번 클릭하면 대리인 메서드가 실행되지 않습니다.

나는 누군가가 힌트가있는 경우

내가 그것을 듣고 기뻐할 것입니다 뭔가 (메모리/범위 문제 지금 RunApplicationEventLoop를 사용하고 계십니까? 이벤트 루프 문제를() 실종 확신합니다.

는 여러분 모두 감사합니다

답변

1

탄소 응용 프로그램에서는 NSApp가 0이됩니다 NSApp는 NSApplicationMain 함수 중에 정의됩니다. NSApplicationMain 함수는 Cocoa 응용 프로그램을 시작하기 위해 호출됩니다 .Con 응용 프로그램에서는 Carbon 메서드를 사용하여 응용 프로그램의 존재 여부를 결정해야합니다 이벤트 처리기를 설치하고 'odoc'사과 이벤트 수신 대기.

+0

답장을 보내 주셔서 감사합니다. 이벤트 핸들러는 실제로 첫 번째 방법 이었지만 앱이 아직 설치되지 않은 경우에는 작동하지 않습니다. 응용 프로그램이 이미로드 된 경우 완벽하게 작동합니다. 다음 줄을 사용했습니다. AEInstallEventHandler (kCoreEventClass 'odoc' \t \t \t \t \t \t \t \t \t AEEventHandlerUPP (HandleOpenDocuments) 0L 거짓); 아직 뭔가가 누락 되었습니까? – user585299

+0

핸들러를 어디에 설치합니까? 당신이 그것을 잡기 전에 끝날지도 모릅니다. Apple의 서비스 개시 문서에 따르면 이전에 응용 프로그램이 열리지 않은 경우 계속 이벤트를 받아야한다고합니다 (http://developer.apple.com/library/mac/#documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCConcepts/LSCConcepts.html%23 // apple_ref/doc/uid/TP30000999-CH202-TP9 중간보다 조금 작음). – ughoavgfhw

+0

main 함수의 첫 번째 줄에 처리기를 설치합니다. 문제가 해결되었습니다. RunApplicationEventLoop을 호출하기 전에 내가 사용하고 있던 SDK 중 하나가 디버그 대화 상자를 띄웠다. 대화 상자가 나타나지 않는 릴리스에서는 문제가 발생하지 않습니다. 이 대화 상자를 표시하는 데 사용 된 메커니즘이 실제로 응용 프로그램이로드되지 않은 경우 작동하지 않는 이유를 설명하는 odoc 이벤트를 "먹는"것으로 가정합니다. 도움 주셔서 감사합니다. – user585299

관련 문제