2016-06-14 11 views
24

Zainstalowałem Xcode 8.0 beta (8S128d). Teraz mam kilka ostrzeżeń z komunikatem:Wywołanie awakeFromNib z nadklasy

Method possibly missing a [super awakeFromNib] call 

we wszystkich metodach awakeFromNib. W takim przypadku muszę nazwać tę metodę nadklasy?

+0

Możliwy duplikat [? Czy mogę zadzwonić \ [Super awakeFromNib \]] (http://stackoverflow.com/questions/3989665/should-i -call-super-awakefromnib) – new2ios

Odpowiedz

32

Zgodnie Apple:

Należy zadzwonić super realizację awakeFromNib dać rodzica klas możliwość wykonywania jakichkolwiek dodatkowych inicjalizacji one wymagają. Mimo że domyślna implementacja tej metody nie powoduje, że wiele klas UIKit dostarcza niepusty implementacje. Możesz zadzwonić do super implementacji w dowolnym momencie podczas własnej metody awakeFromNib.

Przed Xcode 8, nie było wymogu ścisłego kompilatora dla tego, howeever Apple zmienił ten z Xcode8 i kompilator traktuje ją jako błąd, jeśli wezwanie do [super awakeFromNib] (lub super.awakeFromNib() w Swift) brakuje w awakeFromNib.

wersja Swift Tak będzie wyglądać mniej więcej tak:

func awakeFromNib() { 
    super.awakeFromNib() 

    ... your magical code ... 
} 
+0

Dziękujemy! Najlepsza odpowiedź z linkiem do dokumentacji! –

+0

Czy zamówienie nie ma znaczenia? Czy jest jakiś powód, dla którego ktoś chciałby zrobić "[super awakeFromNib]" na końcu, a nie na początku własnej implementacji? – micnguyen

+0

@micnguyen warto zauważyć, że rozszerzasz zachowanie metody super przez jej przesłonięcie. Biorąc to pod uwagę, super musi mieć szansę na wdrożenie swojej rzeczy, ponieważ w przeciwnym razie twoja podklasa mogłaby robić rzeczy, które już zostały zrobione. Widziałem superuczniów nazywających super na końcu, ale to nie jest dobra praktyka, rodzaj pokonania celu super-połączenia. – PostCodeism

17

Skutecznie przesłoniłeś metodę "awakeFromNib" w swoim kodzie. NSView lub jakikolwiek twój supersport implementuje również awakeFromNib - powinieneś zadzwonić do super na początku twojej implementacji, zanim wykonasz jakiś kod, aby upewnić się, że NSView może prawidłowo ustawić się wcześniej.

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    ... your code ... 
} 
Powiązane problemy