30 votes

initWithFrame pas appelé, mais awakeFromNib est

Je suis en train de sous-classe NSOutlineView. Voici mon code:

OutlineViewSublcass.h:

#import <Cocoa/Cocoa.h>

@interface OutlineViewSubclass : NSOutlineView {

}

@end

OutlineViewSubclass.m:

#import "OutlineViewSubclass.h"

@implementation OutlineViewSubclass

- (id)initWithFrame:(NSRect)frame
{
	self = [super initWithFrame:frame];
	printf("debug A\n");
	return self;
}

- (void)awakeFromNib
{
	printf("debug B\n");
}

@end

La sortie de débogage est:

debug B

Pourquoi n'est-ce pas (id)initWithFrame:(NSRect)image appelée?

53voto

Marc Charbonneau Points 30464

Cacao contrôles de mettre en œuvre les NSCoding protocole pour le désarchivage de la plume. Au lieu de l'initialisation de l'objet à l'aide de initWithFrame: et puis en définissant les attributs, les initWithCoder: méthode prend la responsabilité de l'établissement le contrôle lorsqu'il est chargé à l'aide de la sérialisé attributs configuré par Interface Builder. Cela fonctionne presque de la même manière n'importe quel objet est sérialisé à l'aide de NSCoding.

C'est un peu différent, si vous vous en tenez une coutume NSView sous-classe dans une plume qui n'est pas de mettre en œuvre NSCoding, dans ce cas initWithFrame: sera appelée. Dans les deux cas awakeFromNib sera appelée lorsque l'objet est chargé, et est généralement un bon endroit pour effectuer l'initialisation supplémentaires dans votre sous-classes.

19voto

Doug Richardson Points 1386

Officiel d'Apple réponse se trouve ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X