Предупреждение об инициализации NSWindowController

Я разрабатываю приложение на основе документов. Я использую выделенный оконный контроллер для окна документа и вызываю метод -[NSDocument makeWindowControllers].

Мой оконный контроллер инициализируется следующим образом:

- (instancetype) init
{
    if (self = [super initWithWindowNibName:@"Document" owner:self]) {

    }

    return self;
}

Здесь @"Document" — это файл .xib, содержащий главное окно документа, созданное вместе с проектом.

Смысл здесь в том, что этот оконный контроллер всегда инициализируется с этим типом окна, поэтому этот параметр жестко закодирован и скрыт внутри реализации -init (при этом удобно настроить владельца окна на self).

Таким образом, сторона, которая создает экземпляр оконного контроллера (в моем случае, класс документа), не должна беспокоиться о том, какой перо использовать, и может просто вызвать -init.

Проблема в том, что я нарушаю назначенную цепочку инициализаторов, и Xcode жалуется на эти предупреждения:

Семантическая проблема Переопределение метода для назначенного инициализатора суперкласса '-initWithCoder:' не найдено.

Семантическая проблема В назначенном инициализаторе отсутствует «супер» вызов назначенного инициализатора суперкласса.

Семантическая проблема Переопределение метода для назначенного инициализатора суперкласса '-initWithWindow:' не найдено.

Семантическая проблема Назначенный инициализатор вызвал неназначенный инициализатор.

Я бы переключил вызов на -initWithWindowNibName:owner: с одним на -initWithWindow: (и после этого установить владельца вручную, наверное?); но я не знаю, как создать NSWindow непосредственно из пера (или правильно ли это делать).

EDIT: я только что обнаружил, что предупреждения запускаются только потому, что я пометил -init как NS_DESIGNATED_INITIALIZER в своем интерфейсе. Я могу удалить эту метку, и предупреждения исчезнут, но -init является моим де-факто назначенным инициализатором, поэтому я бы предпочел оставить его.


person Nicolas Miari    schedule 30.01.2015    source источник
comment
Вы прочитали это?   -  person stevesliva    schedule 31.01.2015
comment
Нет; Я сделаю это сейчас. Спасибо.   -  person Nicolas Miari    schedule 31.01.2015
comment
Я сделал, и я не мог перевести это на краткий ответ. Нужно будет поиграть с ним в XCode, чтобы увидеть, что делает его счастливым, так что во что бы то ни стало ответьте на это сами.   -  person stevesliva    schedule 31.01.2015