내 메인 창 컨트롤러에 모달 시트 표시를 트리거하는 툴바 항목이 있습니다. 시트는 길고 비동기적인 프로세스의 진행 상황을 표시합니다 (예 : 로컬 데이터를 서버와 동기화).모달 시트의 NSProgressIndicator가 애니메이션되지 않음
그러나 (불확정성) 진행 표시기를 활성화 할 수 없습니다. (
@IBOutlet weak var progressIndicator: NSProgressIndicator!
convenience init() {
self.init(windowNibName: "SyncProgressWindow")
}
override func windowDidLoad() {
super.windowDidLoad()
// Breakpoints here don't work, logs don't print to the console.
// Not called? But outlet _is_ set (see above).
}
XIB 파일 SyncProgressWindow.xib :
var syncProgressWindowController: SyncProgressWindowController!
// ...
@IBAction func syncWithServer(_ sender: AnyObject) {
// (Actual HTTP code not implemented)
syncProgressWindowController = SyncProgressWindowController()
syncProgressWindowController.loadWindow()
guard let modalWindow = syncProgressWindowController.window else {
return
}
self.window?.beginSheet(modalWindow, completionHandler: { (response) in
// THIS GETS EXECUTED.
// However, the code below has no effect:
self.syncProgressWindowController.progressIndicator.startAnimation(self)
// self.syncProgressWindowController.progressIndicator is
// NOT nil, despite windowDidLoad() not being called
// (see below)
})
}
모달 시트 윈도우 제어부 (상기 클래스 SyncProgressWindowController
)과 같이 정의된다 :
이
모달 시트를 유발 작용은) :- "SyncProgressWindowController"로 설정된 파일 소유자 ID/클래스
- 윈도우의 사용
window
- 창
delegate
콘센트가 "파일의 소유자"로 유선있다 파일에 새로운 참조하는 아울렛이 있습니다 (경우에 대비를 -하지만 대리자 메서드 중 하나를 호출되는하지 않는 것). - 창에 "Visible at Launch"가 선택되어 있지 않으므로 문제가없는 모달로 표시됩니다.
- 진행 상태가 File 's Owner의
progressIndicator
에 연결된 새로운 참조 콘센트를 가지고 있습니다. 그러나
:
SyncProgressWindowController
의windowDidLoad()
하지 하지 (실행이 중단 점에서 중지하지 않고 로그가 인쇄되지 않습니다) 전화를받을.
self.syncProgressWindowController.progressIndicator.startAnimation(self)
내가 무엇을 놓치고 : 나는 그것을 애니메이션을 시도 할 때 응용 프로그램이 같은 코드와 충돌하지 않기 때문에 그에도 불구하고
progressIndicator
은, 어떻게 든 설정되어 있습니까?
나는 완성 처리기에 대해서도 그렇게 생각했다. 그러나 그 안에있는 중단 점은 시트가 표시되는 것처럼 실행을 중지합니다 (아직 해고 코드를 작성하지 않았습니다). 내 질문에 설명했듯이 다른 기회에서 진행률 표시기에 애니메이션을 적용하려고해도 실패합니다. 이제 다시 확인했는데 부름을받지 않고 뭔가를 놓쳤을 것입니다. –
'loadWindow()'에 대해서는, 모달 프레젠테이션을 작동 시키려고 거기에 놓았습니다. 당신이 그것을 제거하면'windowDidLoad()'가 호출되게되고, 이제 진행 애니메이션을 시작할 수 있습니다. 감사! –