2015-01-18 2 views
2

앱이 실행을 마칠 때 시트를 모달로 표시하려고합니다. 코드를 일반적인 액션에 배치하고 앱 실행 후 어딘가에 실행하면 원하는대로 작동하고 시트가 멋지게 떨어집니다. 동일한 코드를 사용하여 applicationdidfinishlaunching에 배치하면 시트가 별도의 창으로 표시됩니다 (필요한 것은 아닙니다).모달 시트가 applicationdidfinishlaunching에서 작동하지 않습니까?

[NSApp beginSheet:settingsWindow 
    modalForWindow:[NSApp keyWindow] 
    modalDelegate:nil 
    didEndSelector:nil 
     contextInfo:nil]; 
[NSApp runModalForWindow:settingsWindow]; 

[NSApp endSheet:settingsWindow]; 
[settingsWindow orderOut:self]; 

시작시 표시 옵션이 비활성화되어 있습니다. 어떤 제안에도 감사드립니다. 나는 또한 awakefromnib에서 같은 잘못된 결과로 시도했다.

편집 : [self performSelector : @selector (someAction :) withObject : self afterDelay : 0.5]; someAction의 내용이 위와 같은 경우 올바른 결과가 나타납니다. 왜 이런거야?

+1

keyWindow 메서드는 응용 프로그램의 nib 파일이 아직로드를 완료하지 않았거나 수신기가 활성화되지 않은 경우 nil을 반환 할 수 있습니다. –

답변

1

NSAppbeginSheet: modalForWindow: modalDelegate: didEndSelector: contextInfo:endSheet:deprecated in OS X 10.10입니다. 대신 시트 창을 모달로 표시하려면 beginSheet: completionHandler: on NSWindow 인스턴스를 사용해야합니다. 그런데

NSWindow *mainWindow = [NSApp windows][0]; 
[mainWindow beginSheet:settingsWindow completionHandler: nil]; 

의는 [NSApp keyWindow]didFinishLaunching의 인스턴스를 반환합니까?

+0

비추천 조언 주셔서 감사합니다 - 나는 그것을 발견하지 못했습니다. –