Привязать NSSet, представляющий отношение ко многим, с выбором NSArrayController - PullRequest
1 голос
/ 19 декабря 2011

Вот сценарий. Существует два объекта модели CoreData, A и B, и связь между ними такова, что A has-many B, представленное свойством setOfBs. Я хотел бы отобразить две таблицы, одна из которых перечисляет все как (таблица 1), другая перечисляет все B (таблица 2). Когда пользователь выбирает элементы в Таблице 1, выбор в Таблице 2 изменяется, чтобы отразить значение setOfBs для A, выбранного в Таблице 1. Содержимое таблицы не меняется, меняется только выбор. И если выбор в таблице 1 изменится, он изменит setOfBs, чтобы отразить это.

Может ли это быть достигнуто с помощью привязок? Или потребовалась бы специальная логика?

1 Ответ

1 голос
/ 01 января 2012

Полагаю, вам придется написать дополнительную логику, чтобы этот подход заработал. Вот почему: привязки выбора для NSArrayControllers (и всех объектов пользовательского интерфейса, которые связываются с ними) основаны на выборе indexes , но когда у вас есть объект типа A, он отправляет набор объектов B . Предполагая, что у вас есть контроллер массива для As и контроллер массива для Bs, вам нужен способ получить от этих объектов до их индексов в массиве Bs, чтобы установить выбор контроллера массива для B. Это не сложный код для написания, но я не верю, что вы сможете сделать это только с помощью привязок.

Тем не менее, как вы размышляли в своем комментарии, это не похоже на хороший способ изменить эти отношения. В общем случае выбор TableView имеет состояние UI , а не состояние модель . Если вы создаете интерфейс, подобный описанному, состояние интерфейса и состояние модели становятся одним и тем же. Я не говорю, что это невозможно или, по сути, плохо, но на самом деле это не «стандартный» способ сделать подобные вещи. Один общий шаблон выглядит так:

To-many editing UI example

Даже такой подход потребует дополнительной логики, потому что, похоже, нет способа (из коробки) связать «Все B не в setOfBs выбранного А» без написания кода. Опять же, не сложный код для написания, но мне не ясно, что это можно сделать только с помощью привязок. Я могу ошибаться, но это мое понимание ситуации.

...