Можно ли связать выбор NSTableView с выбором другого табличного представления?

Скриншот

Допустим, у меня есть две сущности в файле модели базовых данных, одна из которых - все "транзакции", когда-либо совершенные компанией X. Сущность "транзакции" имеет среди прочих свойств свойство "ДАТА" и отношение "КОМПАНИЯ" "один к одному" (указывающее компанию, с которой компания Х совершила эту конкретную транзакцию). Другая сущность:"компании", разумеется, содержит всю информацию о компаниях, с которой компания Х заключила сделку. Сущность "компании" имеет множество отношений "TRANSACTIONS", которые являются обратными отношениями к связи "COMPANY" сущности "транзакции".

Так что в IB я создал NSTableView (со своим NSArrayController) показывая все транзакции на определенную дату (с помощью NSPredicate).

Затем я создаю другое табличное представление, показывающее отношение "ко-многим" "СДЕЛКИ" компании выбранной транзакции в первом табличном представлении (которое показывает транзакции на определенную дату). 2-й вид таблицы NSArrayController привязка выглядит так:

** привязка к:"имя контроллера первого табличного представления", ключ контроллера: выбор, путь к ключу модели:COMPANY.TRANSACTIONS(отношение "ко-многим" в сущности "компании")**

До этого момента все работало нормально, во втором табличном представлении показаны все транзакции, которые компания X совершила с компанией из выбранных транзакций в первом табличном представлении.

Но у меня есть группа текстовых полей, показывающих детали конкретных транзакций. Связать эти текстовые поля с контроллером 1-го табличного представления (в котором отображаются транзакции на определенную дату) довольно просто. Но я хочу сделать следующее: 1/ Найти транзакции на определенную дату в первом табличном представлении, выбрать любую из них 2/ Затем проверить все предыдущие транзакции компании этой транзакции (выбранной в первом табличном представлении).) из 2-го табличного представления 3/ Выберите любые предыдущие транзакции и проверьте детали транзакции из этой группы текстовых полей

Поэтому, естественно, мне нужно было привязать gp текстовых полей к контроллеру 2-го табличного представления. Но я обнаружил, что выбранная по умолчанию строка во 2-м табличном представлении (в котором показаны все предыдущие транзакции компании) не была транзакцией, которую я выбрал в 1-м табличном просмотре на определенную дату. Конечно, я могу вручную выбрать эту транзакцию во втором представлении таблицы снова....

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

После нескольких часов поисков в Google я решил проблему, внедрив делегатский протокол tableview:

    - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { 
if (["nameOf1stTableView" selectedRow] > -1) {
    NSArray *objsArray = ["nameOf2ndTableView'sController" arrangedObjects];
    for (id obj in objsArray) {
        if ([[obj valueForKey:@"DATE"] isEqualToDate: ["nameOf1stTableView'sController".selection valueForKey:@"DATE"]]) {
            ["nameOf2ndTableView" selectRowIndexes:[NSIndexSet indexSetWithIndex:[objsArray indexOfObject:obj]] byExtendingSelection:NO];
        }
    }
    }

}

Но это выглядит слишком громоздко... это может быть сделано только с привязкой?

1 ответ

Добавить временное свойство dateFilterPredicate к Transaction объект модели, который предоставляет предикат, который выбирает связанные транзакции - те, которые вы хотите отобразить в табличном представлении № 2, когда этот экземпляр Transaction выбран в табличном представлении #1.

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

Затем привязка предиката фильтра массива контроллера 2 связывается с контроллером массива 1 selection, но вместо company.transactionsиспользовать dateFilterPredicate,

Другие вопросы по тегам