Как мне связать программно в подклассе представления моего NSCollectionView?

Я успешно создал NSCollectionView и добавил метку к прототипу представления в IB, привязанную к свойству представляемого мной объекта. Теперь я хочу программно создать NSButton и NSTextField с NSTextField, привязанным к свойству моего представленного объекта. Когда кнопка нажата, я хочу показать и скрыть NSTextField.

Проблема, с которой я сталкиваюсь, состоит в том, что, если я помещаю свой код инициализации для своих элементов управления в методе представления initWithCoder, а привязка в представлении awakeFromNib, привязка не подключается. Если я помещу инициализацию для своих элементов управления в awakeFromNib, при нажатии кнопки у меня не будет доступа к элементам управления в моем представлении (они равны нулю при печати с использованием NSLog).

Из того, что я могу сказать, похоже, что проблема может заключаться в том, что NSCollectionView работает так, как он создает экземпляр представления, а затем копирует его для определения количества объектов в представлении коллекции. Как получить кнопки для инициализации и привязки для работы с копией прототипа?

Ниже мой код инициализации и моя привязка в awakeFromNib для моего подкласса:

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

Ответы на вопрос(3)

Ваш ответ на вопрос