NSTextField não chamando delegado quando dentro de um NSTableCellView

Tenho uma lista de fontes bastante baunilha (arrastada da Biblioteca de objetos) no meu aplicativo, com umNSTreeController como fonte de dados. Eu defino oNSTextField dentro de DataCell para ser editável, mas quero poder desativá-lo para algumas células. A maneira que eu imaginei que você faria isso é com um delegado para oNSTextField, mas nenhum dos métodos delegados que eu tentei foi chamado. Tem algo que estou perdendo? Eu tenho o delegado definido com uma saída no meu XIB e, por acaso, ele é o delegado do proprietárioNSOutlineView, implementando também oNSOutlineViewDelegate eNSTextFieldDelegaterotocolo

Também não posso usar o antigo–outlineView:shouldEditTableColumn:item: NSOutlineViewDelegate, já que isso funciona apenas com vistas de estrutura de tópicos baseadas em células Suponho que seja esse o caso - a documentação do Outline View não parece ter sido atualizada para o Lion, embora os análogosNSTableView documentação possui, e esses métodos também não são chamados).

Atualiza

Reproduzi isso em um novo projeto de teste, por isso definitivamente não está relacionado a nenhuma das minhas aulas personalizadas. Siga as etapas abaixo para criar meu projeto de amostra e reproduzir este problem

No Xcode 4.1, crie um novo projeto, do tipo Mac OS X Cocoa Application, sem nenhuma opção especial selecionadarie dois novos arquivo SourceListDataSource.m e SourceListDelegate.m, com o conteúdo especificado abaixoNo MainMenu.xib, arraste umSource List na janelaDrag twoObjects no dock (lado esquerdo da janela), especificando oSourceListDataSource classe para um e oSourceListDelegate para o outrConecte a visualização de estrutura de tópicosdataSource edelegate saídas para esses dois objetosSelecione o texto estáticoNSTextField para a visualização DataCell dentro da coluna da visualização de estrutura de tópicosLigue o seuValue ligação, mantendo as configurações padrãoConecte seudelegate saída para o objeto Delegado da Lista de OrigemSet itsBehavior propriedade para EditávelBuild and Run, clique duas vezes em uma das células na exibição de estrutura de tópico

Esperad: O campo não é editável e existe um "bem, devo?" mensagem no log

Rea: O campo é editável e nenhuma mensagem é registrada

Isso é um bug na estrutura ou devo fazer isso de uma maneira diferent

SourceListDataSource.m
#import <Cocoa/Cocoa.h>

@interface SourceListDataSource : NSObject <NSOutlineViewDataSource>

@property (retain) NSArray *items;

@end

@implementation SourceListDataSource

@synthesize items;

- (id)init
{
    self = [super init];
    if (self) {
        items = [[NSArray arrayWithObjects:@"Alo", @"Homora", nil] retain];
    }

    return self;
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
    if (!item) {
        return [self.items objectAtIndex:index];
    }

    return nil;
}

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    return !item ? self.items.count : 0;
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
    return NO;
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return item;
}

@end
SourceListDelegate.m
#import <Foundation/Foundation.h>

@interface SourceListDelegate : NSObject <NSOutlineViewDelegate, NSTextFieldDelegate> @end

@implementation SourceListDelegate

- (NSTableRowView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    return [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}

- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor {
    NSLog(@"well, should I?");
    return NO;
}

@end

questionAnswers(2)

yourAnswerToTheQuestion