Подтвердить что ты не робот

Вызов awakeFromNib суперкласса

Я установил Xcode 8.0 beta (8S128d). Теперь у меня есть некоторые предупреждения с сообщением:

Method possibly missing a [super awakeFromNib] call

во всех методах awakeFromNib. В таком случае мне нужно вызвать этот метод суперкласса?

4b9b3361

Ответ 1

По Apple:

Вы должны вызвать супер-реализацию awakeFromNib, чтобы дать родителям классов возможность выполнить любую дополнительную инициализацию, которую они требуют. Хотя реализация этого метода по умолчанию ничего, многие классы UIKit предоставляют непустые реализации. Вы можете вызов супер-реализации в любой момент awakeFromNib.

До Xcode 8 для этого не было строгого требования к компилятору, в то время как Apple изменила это с помощью Xcode8, а компилятор рассматривает его как ошибку, если в awakeFromNib отсутствует вызов [super awakeFromNib] (или super.awakeFromNib() в swift).

Итак, версия Swift будет выглядеть примерно так:

func awakeFromNib() {
   super.awakeFromNib()

   ... your magical code ...
}

Ответ 2

Вы эффективно переопределяете метод awakeFromNib в своем коде. NSView или независимо от того, что ваш супервизор также реализует awakeFromNib - вы должны вызвать супер в начале своей реализации, прежде чем выполнять какой-либо из своих кодов, чтобы убедиться, что NSView может правильно настроиться заранее.

- (void)awakeFromNib
{
   [super awakeFromNib];

   ... your code ...
}