2

내 경우는 다음과 같습니다.어떻게 제대로 코코아 응용 프로그램 종료를 처리하기 위해?

비표준 문서 기반 응용 프로그램을 개발 중이며 어떤 문서에도 변경 사항이 저장되지 않은 경우 종료를 중단하는 시나리오를 처리하고 싶습니다.

내 초기 아이디어는 :

  • 사용자는 (어느 "Quit XXXXX" 메뉴 항목을 통해 또는 "X" 버튼을 클릭하여)
  • 가 수정 된 문서가 있습니까를 응용 프로그램을 종료하려고? 수정되지 않은 문서가 있음을 사용자에게 통지 :
  • NO 경우 : YES 경우
  • 를 종료합니다. 계속 진행하고 싶다면 그만 둡니다. 그렇지 않으면 취소가 종료됩니다.

그래서, 나는 그것을 대리자 방향을하기로 결정했다. 내 응용 프로그램 위임에서

는, 내가 구현했습니다 :

  • -windowToClose:
  • applicationShouldTerminate:
  • 이제
  • applicationShouldTerminateAfterLastWindowClosed:

, 그게 내가 생각하고 무엇을 (NSWindowWillCloseNotification 트리거) . applicationShouldTerminate: 방법 : 문서가 수정되는 경우

  • 반환 NSTerminateNow에는 수정 된 문서는 반환 NSTerminateCancel
  • 을 존재하지 않는 경우. 이 경우, 그 같은 경고 시트 또는 뭔가를 팝업 및 사용자가 자신이 그만두고 싶은 확인하는 경우, 다음 [NSApp terminate:nil];

올바른 방법은 그것에 대해 가고인가요 전화?

제안 사항? 그 방법 참이다

답변

7

. 하지만 applicationShouldTerminate 구현에서는 바로 경고를 팝업하고 사용자가 취소를 클릭하지 않은 경우 NSTerminateNow을 반환해야합니다. NSTerminateCancel 그렇지. 나중에 응용 프로그램을 수동으로 종료 할 필요가 없습니다.

편집 : 경고를 시트로 표시하지만 모달 대화 상자로 실행하려면 경고에 beginSheetModalForWindow으로 전화 한 다음 [NSApp runModalForWindow:alert]으로 전화하십시오. 또한 beginSheetModalForWindow에 전달하는 끝 선택기에서 모달 루프에서 벗어나려면 [NSApp stopModal]으로 전화해야합니다.

그러나이 경우 경고를 창 시트로 실행하고 applicationShouldTerminate 구현에 NSTerminateLater을 반환하는 것이 좋습니다. 그런 경고에 대한 최종 선택에서, [NSApp replyToApplicationShouldTerminate:]를 호출합니다. 애플이이를 구현하는 방법이다.

+0

좋은 아이디어; 그러나 여기에 YES-NO 경고 시트 (http://snippet.mx/Ra8E)에 사용중인 코드가 있습니다. 같은 함수 내에서 반환되도록하려면 어떻게해야합니까? –

관련 문제