Как NSCell может определить путь ключа модели, к которому он привязан? - PullRequest
1 голос
/ 27 марта 2012

Представьте себе следующее:

  • У вас есть NSTableView с несколькими столбцами.
  • Каждый NSTableColumn привязан к одному и тому же NSArrayController (назовем его myArrayController).
  • Этот контроллер массива содержит много экземпляров класса модели.
  • В одном столбце есть NSPopupButtonCell, где selectedObject связан с myArrayController.arrangedObject.somePropertyOfTheModel.
  • Таблица заполняется правильно.

Q : Как NSCell может определить путь ключа модели , с которым он связан?(somePropertyOfTheModel в этом примере)

Я пытаюсь сделать ячейку многоразовой, не заставляя ее предполагать, что ее представленное значение всегда от somePropertyOfTheModel (может быть от somethingElse).После данного действия ему необходимо привязать content второго контроллера к somePropertyOfTheModel или somethingElse.

[отредактировано] Немного более (может быть, слишком?) Объяснение: Я создаю всплывающую кнопку, которая отображает несколько предустановленных значений свойства, и элемент «Пользовательское значение», который вызывает всплывающее окно, позволяющее настроить свойство.Я хочу сделать так, чтобы я мог поместить эту ячейку в таблицу и заставить ее управлять PopOver так же, как он уже управляет своим собственным меню.

Что я пробовал:

  1. [self representedObject] возвращает фактическое значение.Установка значения content для второго контроллера - это хорошо, но всякий раз, когда изменяется свойство модели, второй контроллер не уведомляется, поскольку он привязан к фактическому экземпляру значения ... не привязка ксвойство модели.

  2. Запрос привязки ячейки ничего не дает:

    [[self infoForBinding:@"selectedObject"] objectForKey:NSObservedObjectKey];   // nil returned
    [[self infoForBinding:@"selectedObject"] objectForKey:NSObservedKeyPathKey];  // nil returned
    
  3. Запрос привязки элемента управления ячейки (NSTableView) не 'я бы дал много:

    [(NSTableView*)[self controlView] infoForBinding:@"content"] objectForKey:NSObservedObjectKey];   // returns myArrayController or a poxy to it.
    [(NSTableView*)[self controlView] infoForBinding:@"content"] objectForKey:NSObservedKeyPathKey];  // returns @"arrangedObject"
    // running the same but for @"selectedObject" returns nothing but nils
    

Я бы хотел запросить сам NSTableColumn - вот где привязки определены в IB - но ячейки не знают об их существовании(если я не упустил что-то очевидное).Даже при прохождении через NSTableView ни один метод не возвращает NSTableColumn для данной ячейки (и, учитывая клетки-прототипы, я сомневаюсь, что это поможет).

...