2016-08-16 2 views
1

내 메인 창 컨트롤러에 모달 시트 표시를 트리거하는 툴바 항목이 있습니다. 시트는 길고 비동기적인 프로세스의 진행 상황을 표시합니다 (예 : 로컬 데이터를 서버와 동기화).모달 시트의 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에 연결된 새로운 참조 콘센트를 가지고 있습니다. 그러나

:

  1. SyncProgressWindowControllerwindowDidLoad()하지 하지 (실행이 중단 점에서 중지하지 않고 로그가 인쇄되지 않습니다) 전화를받을.
    self.syncProgressWindowController.progressIndicator.startAnimation(self)

내가 무엇을 놓치고 : 나는 그것을 애니메이션을 시도 할 때 응용 프로그램이 같은 코드와 충돌하지 않기 때문에 그에도 불구하고

  • 는 재산/콘센트 progressIndicator은, 어떻게 든 설정되어 있습니까?

  • 답변

    1

    시트를 닫으면 완료 핸들러가 실행됩니다. endSheet(_:returnCode:) 시트가 닫히기 전에 표시기가 시작됩니다.

    xib 파일이 좋지 않지만 행을 loadWindow으로 비활성화하면 windowDidLoad가 호출되었습니다. 나는 그것이 옳은 길을 확신하지 못합니다.

    +0

    나는 완성 처리기에 대해서도 그렇게 생각했다. 그러나 그 안에있는 중단 점은 시트가 표시되는 것처럼 실행을 중지합니다 (아직 해고 코드를 작성하지 않았습니다). 내 질문에 설명했듯이 다른 기회에서 진행률 표시기에 애니메이션을 적용하려고해도 실패합니다. 이제 다시 확인했는데 부름을받지 않고 뭔가를 놓쳤을 것입니다. –

    +0

    'loadWindow()'에 대해서는, 모달 프레젠테이션을 작동 시키려고 거기에 놓았습니다. 당신이 그것을 제거하면'windowDidLoad()'가 호출되게되고, 이제 진행 애니메이션을 시작할 수 있습니다. 감사! –