Почему [[NSTableCellView alloc] init] создает пустое текстовое поле?

В приведенных ниже строках журнала будет отображаться «Ячейка таблицы: [здесь записано допустимое значение]», но «Текстовое поле: (пустое)».

На самом деле я пытаюсь создать NSOutlineView программно, и он работает с подходом на основе ячеек, но не с подходом на основе представления. Может кто-нибудь сказать мне, что я делаю неправильно?

-(NSView*)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    NSTableCellView* view = [outlineView makeViewWithIdentifier:tableColumn.identifier owner:self];
    if (view == nil) {
        view = [[NSTableCellView alloc] init];
        view.identifier = tableColumn.identifier;
    }

    view.textField.stringValue = @"TEST";

    NSLog(@"Table cell: %@", view);
    NSLog(@"Text field: %@", view.textField);

    return view;
}

person magnus    schedule 24.11.2014    source источник
comment
Вы не создали там экземпляр textField!!!   -  person Anoop Vaidya    schedule 24.11.2014
comment
У меня сложилось впечатление, что текстовое поле уже существовало? А еще, когда я попробовал view.textField = [[NSTextField alloc] init], приложение подняло EXC_BAD_ACCESS.   -  person magnus    schedule 24.11.2014
comment
Я считаю, что вы должны создать отдельный объект textField и addSubview: его в представлении схемы.   -  person Anoop Vaidya    schedule 24.11.2014
comment
... или переопределить NSTableCellView и позволить подклассу сделать это. Что является превосходным подходом.   -  person trojanfoe    schedule 24.11.2014
comment
Подкласс всегда является лучшим вариантом в этих требованиях.   -  person Anoop Vaidya    schedule 24.11.2014
comment
Почему это лучше? Разве NSTableCellView не должен работать из коробки? Создать список источников программно невероятно сложно.   -  person magnus    schedule 24.11.2014
comment
Если вы собираетесь использовать [[NSTextField alloc] init] для установки свойства textField, вам нужно создать его, а затем добавить в качестве подвида вашего NSTableCellView ([view addSubview:tf]). Ошибка EXC_BAD_ACCESS может быть вызвана пропуском этого шага. В этом методе вам также нужно будет установить рамку вашего поля или, что еще лучше, ограничить ее.   -  person Paul Patterson    schedule 25.11.2014