He instalado Xcode 8.0 beta (8S128d). Ahora tengo algunas advertencias con el mensaje:

Method possibly missing a [super awakeFromNib] call

en todos los awakeFromNib métodos.
En cuyo caso tengo que llamar a este método de la superclase?

2 Comentarios

  1. 36

    Como por Apple:

    Debe llamar a la super aplicación de awakeFromNib para darles a los padres
    las clases de la oportunidad para realizar cualquier inicialización adicionales que
    requieren. Aunque la implementación predeterminada de este método no
    nada, muchas UIKit clases no vacío de las implementaciones. Usted puede
    llame a la super aplicación en cualquier momento durante su propia
    awakeFromNib método.

    Antes de Xcode 8, no había estricto compilador requisito para esto , howeever Apple ha cambiado esto con Xcode8, y el compilador trata como error si la llamada a [super awakeFromNib] (o super.awakeFromNib() en swift) no se encuentra en awakeFromNib.

    Así Swift versión sería algo como esto:

    func awakeFromNib() {
       super.awakeFromNib()
    
       ... your magical code ...
    }
    • Gracias! Mejor respuesta con la documentación enlace!
    • ¿El orden no importa? Alguna razón por la que uno quisiera hacer [super awakeFromNib] al final en vez de en el comienzo de su propia implementación de la misma?
    • vale la pena señalar que estás ampliando el comportamiento de la super método mediante la invalidación de la misma. Teniendo en cuenta esto, super necesita una oportunidad para implementar su propio lo primero, porque de lo contrario la subclase podría estar haciendo cosas que ya está hecho. He visto que los devs de llamar a super en la final, pero esto no es una buena práctica, tipo de derrotas el propósito de un súper llamada.
    • Sí, estoy de acuerdo. Pero el apple docs notas: «Usted puede llamar a la super aplicación en cualquier momento durante su propia awakeFromNib método.» tan sólo soy un poco curioso por qué no aplicarla en el inicio.
    • debido a que las mejores prácticas no debe ser forzada, sólo deben ser advertidos 🙂 Además, a veces, de hecho, hay una buena razón para llamar a la final…pero muy rara vez.
    • Yo no puedo encontrar ninguna razón para ponerlo en la final importa cuán duro trato. ¿Podría dar un ejemplo?

  2. 18

    Que efectivamente está reemplazar el método ‘awakeFromNib’ en el código. NSView o cualquiera que sea tu superview es también implementa awakeFromNib — usted debe llamar a la super en el inicio de su ejecución, antes de hacer de su código para asegurarse de que NSView puede organizarse correctamente de antemano.

    - (void)awakeFromNib
    {
       [super awakeFromNib];
    
       ... your code ...
    }

Dejar respuesta

Please enter your comment!
Please enter your name here