2009-11-05 2 views
1

응용 프로그램이 종료 될 때 실행해야하는 코드가 있습니다. 다음과 같이 내가 NSApplicationWillTerminateNotification 내 컨트롤러를 등록 :NSApplicationWillTerminateNotification을받지 못했습니다.

[[NSNotificationCenter defaultCenter] 
    addObserver: self 
     selector: @selector(applicationWillTerminate:) 
      name: NSApplicationWillTerminateNotification 
     object: nil]; 

을 지금, 나는 내 응용 프로그램을 시작하고 처음 20 초 그래서 이내에 종료하면, applicationWillTerminate 불려갑니다. 나중에 응용 프로그램을 종료하면 그렇지 않습니다. 내 응용 프로그램에서이 문제가 발생할 수있는 원인은 무엇입니까? 또한 NSAPlication의 델리게이트로 컨트롤러를 설정하려고 시도했습니다. 어떤 아이디어?

감사합니다.

아, 그리고 이것은 10.5 SDK를 사용하는 XCode 3.2, Snow Leopard 10.6.1입니다. 디버그 및 릴리스 빌드 모두에서 발생합니다.

답변

5

이 문제가 발생하는 데에는 몇 가지 이유가 있습니다.

GC'd를 실행중인 경우 종료가 발생하기 전에 관찰자가 수집되어 최종 결정됩니까? (적어도 이것을 문서화해야하는 경우 버그를 테스트해야합니다)

앱이 자동으로 충돌하거나 exit()를 직접 호출합니까?

일반적으로 사용자는 강제 종료를 요청할 수 있으므로 종료 알림을받을 수 없습니다.

또한 Snow Leopard에는 갑작스런 종료라는 기능이있어서 정상적인 종료 rigamarole을 거치지 않고 앱을 죽이는 것이 안전하다는 것을 시스템에 알릴 수 있습니다. 이 문서는 NSProcessInfo 설명서에 설명되어 있습니다.

+0

예,이 동작은 '갑자기 종료'기능으로 인해 발생했습니다. 내 Info.plist에서 NSSupportsSuddenTermination을 활성화했다. 많은 감사합니다! – svintus