Назначенные предупреждения инициализатора при вызове другого init из initWithCoder:
Я работаю над унаследованной кодовой базой и пытаюсь разрешить следующие предупреждения:
Назначенный инициализатор должен вызывать только указанный инициализатор в "super"
В указанном инициализаторе отсутствует "супер" вызов назначенного инициализатора суперкласса
Код является:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [self initWithFrame:[CDCUtility getScreenBounds]]; //switching to super breaks
if (self) {
}
return self;
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setArray:[NSMutableArray new]];
[self setButtonArray:[NSMutableArray new]];
_graphicEQ = [[CDCEffectsGraphicEQ alloc] initWithFrame:CGRectMake((1024 / 2) - (811 / 2), 60, 860, 255)];
[self addSubview:_graphicEQ];
[_graphicEQ setDelegate:self];
[self addBypassButtonToView];
[self addFlatButtonToView];
[self addScrollView];
}
return self;
}
Так что из того, что я могу разглядеть, разработчик перегнал суперкласс initWithCoder:
(Это UIView
) чтобы пользовательский интерфейс мог быть загружен и передан в этом initWithFrame:
параметр, использующий пользовательские аргументы для создания представления.
Я видел, как некоторые говорят, изменить [self initWithFrame:]
' в initWithCoder:
в [super initWithFrame:]
который разрешает предупреждения, однако он также обходит вызов функций, необходимых здесь для правильной загрузки представления.
Работает нормально как есть; Я просто хотел сократить все возможные предупреждения, поэтому я подумал, можно ли внести изменения, чтобы решить эту проблему?
1 ответ
Попробуй это:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self designatedInitializer];
}
return self;
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self designatedInitializer];
}
return self;
}
- (void) designatedInitializer {
[self setArray:[NSMutableArray new]];
[self setButtonArray:[NSMutableArray new]];
_graphicEQ = [[CDCEffectsGraphicEQ alloc] initWithFrame:CGRectMake((1024 / 2) - (811 / 2), 60, 860, 255)];
[self addSubview:_graphicEQ];
[_graphicEQ setDelegate:self];
[self addBypassButtonToView];
[self addFlatButtonToView];
[self addScrollView];
}