ios macos initialization nsviewcontroller awakefromnib

ios - La mejor forma de configurar un NSViewController inicializado con initWithNibName: paquete:?



macos initialization (1)

Tengo una subclase de NSViewController que carga su vista desde una punta (con initWithNibName: bundle: y es el propietario del archivo de esa punta).

Necesito hacer una inicialización después de cargar el plumín y quiero que mi código sea el más compatible:

  • En ios: existe el método viewDidLoad para hacer eso
  • En osx: en Snow Leopard, no hay un método como viewDidLoad, pero se llama a awakeFromNib en el propietario del archivo también.

Entonces mis preguntas son:

  1. ¿Se llama también awakeFromNib al propietario del archivo del plumín en Lion?
  2. Si uso awakeFromNib, ¿necesito 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 1 es NO, ¿es esta 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


Esto es lo que encontré:

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

  2. A partir de OSX 10.6, hay una categoría en NSObject que agrega awakeFromNib , por lo que es seguro llamar a [super awakeFromNib] desde cualquier subclase. Para OSX anterior a 10.6, podemos usar instancesRespondToSelector : para saber si la clase padre implementa awakeFromNib , la subclase NSView o NSObject no debe llamar a [super awakeFromNib] .