Я предполагаю, что для создания экземпляра вашего оконного контроллера в Интерфейсном Разработчике вы перетащили общий экземпляр NSObject
в файл nib, а затем присвоили свой пользовательский подкласс NSWindowController
в качестве класса объекта, это правильно?Если так, то я думаю, что их ключевое отличие в том, что вы имеете дело с созданием экземпляра универсального объекта, а не пользовательского объекта, включенного в одну из палитр IB.
Большую часть времени, когда вы создаете ипри настройке объекта с использованием IB параметры, указанные вами в различных инспекторах, кодируются с использованием метода encodeWithCoder:
при сохранении файла пера.Когда вы затем загружаете этот nib-файл в свое приложение, эти объекты инициализируются с использованием метода initWithCoder:
.
Однако в случае этого экземпляра универсального объекта Interface Builder не обязательно ничего знает о классеобъекта, который создаетсяПоскольку вы можете указать любое имя класса для создания экземпляра, если вы укажете класс, который IB не загрузил через палитру или структуру, он не сможет сериализовать этот объект, используя NSCoding
.Поэтому я считаю, что когда вы создаете экземпляр такого общего объекта, он инициализируется с использованием init
, а не initWithCoder:
, потому что он не был сохранен с использованием encodeWithCoder:
в первую очередь при сохранении файла пера.
Я не знаю, документировано ли это где-либо, но я думаю, именно поэтому вы видите разницу там.Я также не думаю, что он специфичен для NSWindowController
, но вы скорее всего увидите такое же поведение для любого объекта, экземпляра которого является общий NSObject
в IB, независимо от конкретного класса.