コードのどこかで、メインウィンドウから複数のウィンドウを作成する必要があります。各ウィンドウは特定の構成で機能しますが、すべてのインスタンスは同じコントローラーオブジェクトです。
また、開いているウィンドウのリストを保持する必要があるため、ウィンドウを開くたびにそのインスタンスを辞書に保存し、ウィンドウを閉じるとメインウィンドウに通知を送信して、メソッドを起動し、その特定のウィンドウをから削除します。辞書。
コントローラオブジェクトのインスタンスを作成し、その上で[showWindow:self]を呼び出すことで、ウィンドウを作成します。次に、ウィンドウを辞書に保存して、メソッドを終了します。
私の問題は、ウィンドウがディクショナリから削除されたときに実行する必要があるため、新しく作成されたオブジェクトを解放も自動解放もしないことです(右?)。そのオブジェクトをリリースまたは自動リリースすると、ディクショナリに保存した後、ディクショナリからオブジェクトを削除しようとすると、あらゆる種類のエラーが発生します。
1)これは、インスタンスがディクショナリに格納されていることに気付かないXcodeの単純なバグでしょうか?
2)とにかく、辞書にウィンドウへの参照が保存されている場合、自動解放によってウィンドウが破棄されるのはなぜですか?
[更新]以下のコード
CHPostgreSQLMainController *pgMainController = [[CHPostgreSQLMainController alloc]initWithConnectionSettings:(CHPostgreSQLSettingsModel *)entityFromArray error:&error];
// Only display the window if the connection was successful.
if (pgMainController) {
[pgMainController showWindow:self];
// Register the window we've opened on the list of open windows
[listOpenWindows setObject:pgMainController forKey:[entityFromArray connectionName]];
} else {
//call NSAlert
}