2017-01-31 2 views
0

간단한 설치 (OSX가 아닌 OSX) : 두 개의 창 A와 B. 창 A는 시작 화면이고 창 B는 기본 화면입니다.NSPopover가 프로그래밍 방식으로 트리거 된 segue에서 충돌합니다. OSX, Xcode 8.2

흐름은 다음과 같습니다.> 응용 프로그램 시작 화면> "새 프로젝트"버튼을 클릭하면 창 B가 열립니다.

창 B에는 버튼이 있습니다. IB에서 버튼을 설정하여 팝업 (segue)을 통해보기를 엽니 다. Segue on button click은 예상대로 작동합니다. 어떤 곳에서는 버튼에 연결된 동일한 팝업을 열기 위해 프로그래밍 방식으로 segue (performSegueWithIdentifier)를 트리거합니다. 이것은 예상대로 작동합니다.

[self performSegueWithIdentifier:@"showSHImportCSVPrefsViewController" sender:nil]; 

는 그러나 : 나는 창을 다시 창 A와 열려있는 창 B에 반환 B ("새 프로젝트")를 닫으면 프로그래밍 방식 수동 버튼 클릭이 여전히 작동하는 경우에도 트리거 할 때 팝 오버에서 오류가 발생합니다 .. . 그래서 그렇게 혼란 스러웠다. ...

[NSPopover showRelativeToRect:ofView:preferredEdge:]: view has no window. You must supply a view in a window.' 

답변

0

전체의 코드를 조사한 결과, 관찰자는 죽지 않았다. 그래서 창 B를 닫았다가 다시 열었을 때 동일한 관찰자가 다시 생성되어 프로그램 적으로 segue 호출이 두 번 트리거되어 위의 상황이 발생했습니다.

해결 방법 : removeObserver on - (void) dealloc

관련 문제