¿Cómo puedo enlazar programáticamente en la subclase de vista de mi NSCollectionView?

He creado con éxito un NSCollectionView y he agregado una etiqueta al prototipo de vista en IB, vinculado a una propiedad de mi objeto representado. Ahora quiero crear un NSButton y NSTextField programáticamente con el NSTextField enlazado a una propiedad de mi objeto representado. Cuando se hace clic en el botón, quiero mostrar y ocultar el NSTextField.

El problema que encontré es que si pongo mi código de inicialización para mis controles en el método initWithCoder de la vista y el enlace en la vista awakeFromNib de la vista, el enlace no se engancha. Si pongo la inicialización de mis controles en awakeFromNib, cuando se hace clic en el botón, no tengo acceso a los controles en mi vista (son nulos cuando se imprimen usando NSLog).

Por lo que puedo decir, parece que el problema puede ser que la forma en que funciona NSCollectionView es que crea una instancia de la vista y luego la copia para ver cuántos objetos hay en la vista de colección. ¿Cómo obtengo los botones para inicializar y el enlace para trabajar con la copia del prototipo?

A continuación se muestra mi código de inicialización y mi enlace en awakeFromNib para mi vista subclasificada:

SubView.h

@interface SubView : NSView {
    NSButton *button;
    NSTextField *textField;
    IBOutlet NSCollectionViewItem *item; // Connected in IB to my NSCollectionViewItem
}

- (IBAction)buttonClicked:(id)sender;

@end

SubView.m

@implementation SubView

- (id)initWithCoder:(NSCoder *)decoder
{
    id view = [super initWithCoder:decoder];

    button = [[NSButton alloc] initWithFrame:NSMakeRect(50, 95, 100, 20)];
    [button setTitle:@"Begin Editing"];
    [button setTarget:self];
    [button setAction:@selector(buttonClicked:)];
    [self addSubview:button];

    textField = [[NSTextField alloc] initWithFrame:NSMakeRect(10, 10, 100, 75)];
    [self addSubview:textField];

    return(view);
}

- (void)awakeFromNib
{   
        // Bind the textField to the representedObject's name property
        [textField bind:@"value" 
       toObject:item 
        withKeyPath:@"representedObject.name" 
        options:nil];
}

- (IBAction)buttonClicked:(id)sender
{
    [button setTitle:@"End Editing"];
    [textField setHidden:YES];
}

@end

Respuestas a la pregunta(3)

Su respuesta a la pregunta