2017-01-31 5 views
0

私はシンプルなセットアップ(OSXでないOS): 2つのウィンドウAとB.ウィンドウAはスプラッシュスクリーン、ウィンドウBはメインスクリーンです。OSX、Xcode 8.2

フローはこのようになります - >アプリケーションの起動時にウィンドウA、 "新規プロジェクト"ボタンをクリックするとウィンドウBが開きます。

ウィンドウBにはボタンがあります。ポップオーバー内のビューを開くために、ボタンがIBで設定されています(セグを使用)。 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を閉じて再び開いたとき、同じオブザーバが再度作成され、プログラムでセグの呼び出しが2回トリガされ、上記の状況が発生しました。

解決策:removeObserver on - (void)dealloc

関連する問題