InitWithCoder никогда не вызывался для класса, основанного на Cocoa NSView
Я создаю XIB
,
Я создаю этот класс под названием MyCustomView
и назначить его XIB
Владелец файла.
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) [self load];
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) [self load];
return self;
}
- (void)load {
NSArray* topLevelObjects;
[[NSBundle mainBundle] loadNibNamed:@"MyCustomView"
owner:self
topLevelObjects:&topLevelObjects];
NSView* view;
for (id aView in topLevelObjects) {
if ([umaVista isKindOfClass:[NSView class]]) {
view = umaVista;
break;
}
}
[self addSubview:view];
view.frame = self.bounds;
}
Я создаю NSView
в основном приложении.
Я изменяю эту точку зрения на MyCustomView
,
Я запускаю приложение. MyCustomView
"s initWithCoder
не работает. initWithFrame
не работает. awakeFromNib
не работает.
Ничего не произошло.
Есть идеи?
1 ответ
"Владелец файла", как я уже писал в другом месте, не является реальным объектом в архиве. Это заполнитель. Когда вы распаковываете перо, уже используется существующий объект.
Похоже, вы должны просто поместить экземпляр вашего собственного представления в перо. Не делайте его владельцем файла, просто перетащите вид из палитры объектов, а затем измените его класс в Identity Inspector (правая панель, вверху; нажмите ⌘-⌥-3). Создайте подпредставления в перо тоже.
Тогда получите ваш NSBundle
загрузить перо для вас. Ваш пользовательский вид получит initWithCoder:
а также awakeFromNib
и вам не придется разбираться в иерархии, чтобы найти конкретное подпредставление.