2012-04-05 10 views
8

tengo una subclase de NSViewController que carga su vista desde un plumín (con initWithNibName: bundle: y es el propietario del archivo de ese plumín).La mejor manera de configurar NSViewController inicializado con initWithNibName: paquete :?

Necesito hacer algo de inicialización después de cargar la punta y quiero que mi código sea el más compatible:

  • En ios: No es el método viewDidLoad hacer que
  • En OSX: En leopardo de las nieves, no existe un método como viewDidLoad pero awakeFromNib se llama el propietario del archivo de la punta demasiado

Así que mis preguntas son:

  1. ¿Se ha llamado también awakeFromNib al propietario del archivo del plumín en Lion?
  2. Si uso awakeFromNib, ¿tengo que llamar a [super awakeFromNib]? (¿NSViewController implementa awakeFromNib?)
  3. Si la respuesta 1 es SÍ, ¿es esta una buena solución? :
- (void)initAfterNibLoaded { 
    ... 
} 

- (void)viewDidLoad { 
    // Code for ios 
    [self initAfterNibLoaded]; 
} 

- (void)awakeFromNib { 
    // Code for osx 

    // Not sure if necessary 
    [super awakeFromNib]; 

    [self initAfterNibLoaded]; 
} 

Si la respuesta es NO 1, es ésta una buena solución? :

- (void)viewDidLoad { 
    // Initialize after nib loaded 
} 

#ifndef TARGET_OS_IPHONE 
- (void)loadView { 
    // Call parent method 
    [super loadView]; 

    // Simulate viewDidLoad method 
    [self viewDidLoad]; 
} 
#endif 

Gracias

+0

Dado que NSViewController no está presente en UIKit, no estoy seguro de por qué está generalizando a través de las plataformas. –

+0

Sí, pero quiero hacer la menor modificación posible en el código si necesito portarlo a iOS. Cambiar la clase padre de NSViewController a UIViewController no es gran cosa, pero prefiero evitar tener muchos errores porque algunos métodos se llaman en ios y no en osx o viceversa. – Johnmph

+0

La respuesta es obviamente jQuery. –

Respuesta

4

Esto es lo que encontré:

  1. Sí, awakeFromNib: se llama también el propietario del archivo de la punta en León (y normalmente es el mismo para el nuevo Mountain Lion).

  2. Comenzando en OSX 10.6, hay una categoría en la que se suma NSObjectawakeFromNib, por lo que es seguro llamar [super awakeFromNib] de cualquier subclase. Para OSX anterior a 10.6, podemos usar instancesRespondToSelector: para saber si la clase principal implementa awakeFromNib, la subclase NSView o NSObject no debe llamar al [super awakeFromNib].

Cuestiones relacionadas