Проблема в том, что он не создает окно каждый раз. Отпускание при закрытии - это немного раздражающая опция, и обычно она используется только в том случае, если вы знаете, что оконный контроллер также освобождается при закрытии окна. (Обратите внимание, что я никогда не использовал MacRuby, поэтому я буду давать код в Obj-C, поскольку я знаю, что он правильный, надеюсь, вы сможете преобразовать его. Я буду считать, что GC включен, как и должно быть в MacRuby).
Теперь есть два способа сделать это. Я не совсем уверен, как настроены ваши NIB / классы, так как это может быть одним из двух способов.
-
Первый способ решить эту проблему - использовать выходы, которые вы используете для ссылки на элементы формы, чтобы очистить их при повторном отображении окна, например [myTextField setStringValue: @ ""]. Если вы используете привязки какао, то это немного сложнее, но в основном вы должны убедиться, что связанный объект скрыт. Я бы рекомендовал против привязок, если вы новичок в Какао.
-
Второй способ - сделать класс AddNewAccountController подклассом NSWindowController. Когда вы нажмете кнопку +, вы создадите новый экземпляр и отобразите его (не забудьте сохранить его в ivar). Лучший способ сделать это будет так:
if (!addAccountController) {
addAccountController = [[AddNewAccountController alloc] initWithWindowNibName:@"AddNewAccountController"];
[[addAccountController window] setDelegate:self];
}
[addAccountController showWindow:self];
Это предотвращает создание нового экземпляра, если окно уже видно. Затем вам нужно реализовать делегат:
- (void)windowWillClose:(NSNotification *)notification {
//If you don't create the account in the AddNewAccountController then do it here
addAccountController = nil;
}
Очевидно, вам необходимо переместить окно в отдельный NIB с именем «AddNewAccountController». В этом NIB убедитесь, что для класса «Владелец файла» задано значение «AddNewAccountController», а затем для подключения окна «Владелец файла» к окну.
Когда все это настроено, вы будете каждый раз получать новый контроллер / окно. Он также имеет преимущество в разделении перьев и контроллеров на более сфокусированные устройства.
-
И последнее. Хотя в окне можно сделать что-то подобное, вы можете захотеть посмотреть на это с помощью листа, так как это предотвратит возможность скрытия окна добавления учетной записи за другими окнами.