Если этот код выполняется при каждом нажатии кнопки, то вы фактически создаете новый оконный контроллер, загружаете его окно из файла пера и отображаете это окно столько раз, сколько нажата кнопка.
Стандартный подход для предотвращения этого состоит в том, чтобы изначально иметь переменную экземпляра nil
и назначить ей контроллер окна только один раз. Впоследствии переменная экземпляра больше не является nil
, и вы можете проверить это, чтобы избежать создания другого контроллера и повторной загрузки файла пера.
Вы можете, например, объявить следующую переменную экземпляра в вашем делегате приложения или любой другой контроллер, который должен отвечать за третий контроллер окна:
ThirdViewController *tvc;
и при нажатии кнопки:
if (nil == tvc) {
// If tvc is nil then it's the first time this code is being executed
tvc = [[ThirdViewController alloc] initWithWindowNibName:@"SecondViewController"];
}
[tvc showWindow:self];