Многоуровневая привязка NSPopupButton

Я пытаюсь использовать два NSPopupButton, которые связаны друг с другом, и у меня возникают проблемы с привязками на кнопке "ребенок".

У меня есть три основных типа сущностей данных: Order, Client, а также Station, Station -> Client это много к 1, так что Client имеет несколько Station, но Station можно указать только на одного клиента.

Order имеет один Station прикрепленный к нему, поэтому я создал все привязки, как показано ниже. Я могу правильно выбрать любого клиента из первого раскрывающегося списка, но затем раскрывающийся список станций просто показывает текущую выбранную станцию. Я не вижу всех доступных станций, и если я меняю клиента, я не вижу нового списка станций для выбора.

Контроллер заказов

NSObjectController, связанный с order свойство объекта в контроллере представления.

Контроллер массива клиентов

Просто привязывается к представлению регулятора viewObjectContext для получения всех клиентов.

Контроллер массива станций

Клиент NSPopupButton

Привязка контента Привязка значений содержимого Связывание выбранного индекса

Станция NSPopupButton

Привязка выпадающего содержимого станции Привязка значений раскрывающегося содержимого станции Привязка выделенного объекта к раскрывающемуся объекту

1 ответ

Решение

Выбранное значение клиентской всплывающей кнопки используется для фильтрации станций, оно не должно менять клиента станции из заказа. Привязать выбранный индекс (вместо выбранного объекта) всплывающей кнопки клиента к контроллеру клиентского массива, ключ контроллера selectionIndex, Путь к ключевой модели отсутствует.

Привязать выбранный объект всплывающей кнопки станции к контроллеру объекта заказа, клавише контроллера selection, Путь к ключевой модели station,

Когда пользователь выбирает клиента, выбранная станция остается станцией заказа. Если у этой станции другой клиент, всплывающая кнопка станции автоматически не выбирает другую станцию. Вы можете исправить это с помощью всплывающей кнопки клиента. Например:

- (IBAction)clientAction:(id)sender {
    NSArray *stations = self.stationArrayController.arrangedObjects;
    if (![stations containsObject:order.station]) {
        if (stations.count > 0)
            self.order.station = stations[0];
        else
            self.order.station = nil;
    }
}
Другие вопросы по тегам