Назначенные предупреждения инициализатора при вызове другого 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];
}
Другие вопросы по тегам