在我的代码的某个地方,我需要从一个主窗口创建几个窗口,每个窗口都具有特定的配置,但所有实例都是同一个控制器对象。
我还需要保留一个打开的窗口列表,所以每当我打开一个窗口时,我都会将它的实例存储在字典中,当窗口关闭时,我会向主窗口发送一个通知,该窗口会触发一个方法,然后从字典。
我通过创建其控制器对象的实例然后在其上调用 [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
}