Я бы сказал, что с помощью [self release] в инициализаторе MySubview initWithFrame вы отбрасываете класс, который вы хотите создать с помощью инициализатора.Класс загружается методом loadNibName и поэтому имеет тот же класс, который определен в кончике.Поэтому бесполезно вызывать инициализатор в подклассе.
Попробуйте реализовать свой собственный конструктор пера в MySubview (например, initWithNibFile):
- (id) initWithNibFile:(NSString *) nibName withFrame:(CGRect) frame
и т. Д.и вызовите этот конструктор в RedMySubview
- (id) initWithNibFile:(NSString *) nibName withFrame:(CGRect) frame {
self = [super initWithNibFile:mynib withFrame:MyCGRect];
if (self)
....
Если вы теперь посмотрите, что ваш nib-файл действительно имеет RedMySubview в качестве класса, fire должен быть переопределен.Если вы используете и MySubview и RedMySubview, вы должны продублировать xib.Или вы создаете абстрактный класс (заглушку), который реализует только инициализатор initWithNibFile, а UIViews, которые вы хотите создать, являются его подклассами:
MyAbstractNibUIView initWithNibFile:withFrame:
MyRedSubview : MyAbstractNibUIView red.xib
MyGreenSubview :MyAbstractNibUIView green.xib
MyBlueSubview : MyAbstractNibUIView blue.xib