2016-06-14 17 views
24

Ho installato Xcode 8.0 beta (8S128d). Ora ho alcuni avvisi con un messaggio:Calling awakeFromNib della superclasse

Method possibly missing a [super awakeFromNib] call 

in tutte awakeFromNib metodi. In tal caso devo chiamare questo metodo di superclasse?

+0

Eventuali duplicati di [? Devo chiamare \ [super awakeFromNib \]] (http://stackoverflow.com/questions/3989665/should-i -call-super-awakefromnib) – new2ios

risposta

32

Secondo Apple:

è necessario chiamare il super attuazione awakeFromNib per dare genitore classi la possibilità di compiere un ulteriore inizializzazione che richiedono. Sebbene l'implementazione predefinita di questo metodo non comporti nulla su , molte classi UIKit forniscono implementazioni non vuote. Puoi chiamare la super implementazione in qualsiasi momento durante il tuo metodo awakeFromNib.

Prima Xcode 8, non era previsto compilatore rigorosa per questo, howeever Apple ha cambiato questo con Xcode8, ed il compilatore tratta come errore se chiamata a [super awakeFromNib] (o super.awakeFromNib() a Swift) non è presente nel awakeFromNib.

versione Così Swift sarebbe simile a questa:

func awakeFromNib() { 
    super.awakeFromNib() 

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

Grazie! La migliore risposta con il link alla documentazione! –

+0

L'ordine non ha importanza? Qualunque motivo per cui uno vorrebbe fare '[super awakeFromNib]' alla fine piuttosto che all'inizio della propria implementazione di esso? – micnguyen

+0

@micnguyen vale la pena notare che stai estendendo il comportamento del metodo super sovrascrivendolo. Considerando questo, super ha bisogno di una possibilità per implementare le proprie cose prima, perché altrimenti la sottoclasse potrebbe fare cose che sono già state fatte. Alla fine ho visto gli sviluppatori chiamare super, ma questa non è una buona pratica, un tipo di sconfitte lo scopo di una super chiamata. – PostCodeism

17

Stai effettivamente ignorando il metodo 'awakeFromNib' nel codice. NSView o qualsiasi altra cosa che la tua superview è anche implementata da ReadyFromNib - dovresti chiamare il super all'inizio della tua implementazione prima di eseguire qualsiasi codice per assicurarti che NSView possa essere configurato correttamente in anticipo.

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    ... your code ... 
} 
Problemi correlati