Где-то в моем коде мне нужно создать несколько окон из главного окна, каждое из которых функционирует с определенной конфигурацией, но со всеми экземплярами одного и того же объекта контроллера.
Мне также нужно сохранить список открытых окон, поэтому всякий раз, когда я открываю окно, я сохраняю его экземпляр в словаре, а когда окно закрывается, я отправляю уведомление в главное окно, которое вызывает метод, который затем удаляет этот конкретный окно из словаря.
Я создаю окна, создавая экземпляр их объекта контроллера и затем вызывая [showWindow: self] для него. Затем я сохраняю окно в словаре и выхожу из метода.
Моя проблема в том, что я не освобождаю и не автоматически освобождаю вновь созданный объект, как это должно быть сделано при удалении окна из словаря (правильно?). Если я освобождаю или автоматически высвобождаю этот объект, после того, как я сохраню его в словаре, при попытке удалить объект из словаря я получу все виды ошибок.
1) Может ли это быть простой ошибкой в Xcode, которая не замечает, что экземпляр хранится в словаре?
2) В любом случае, почему авто-релиз уничтожает мое окно, если в словаре хранится ссылка на него?
[Update]
Код ниже
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
}