Базовые данные: сортировка по отношению ко многим в NSTableView - PullRequest
0 голосов
/ 02 августа 2010

У меня проблемы с тем, чтобы мой NSTableView сохранял содержимое упорядоченного отношения ко многим.

То, что у меня есть, это сущность "Отношения" в отношении "многие-многие" с сущностью "Карта", управляемая NSArrayController. Карта имеет 2 атрибута: «число» (int) и «имя» (String), отображаемые посредством привязок в двух столбцах NSTableView. Я могу сортировать столбцы таблицы постоянно, но при каждой новой вставке карты строки представления таблицы меняются случайным образом (однако при удалении карты сохраняется порядок строк).

Мне нужно следующее поведение: пользователь может сортировать столбцы, но когда он вставляет карточку, карточка должна отображаться как самая последняя строка таблицы (не сортируется непосредственно при вставке, но, конечно, не отображается случайная перестановка, либо). Только когда пользователь выполнит сортировку снова, новая карта также будет отсортирована.

Я знаю, что содержимое отношений «многие ко» хранится в виде наборов, но я не знаю, как это сделать.

Я ценю любую помощь.

Ответы [ 2 ]

1 голос
/ 02 августа 2010

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

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

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

Это сложно реализовать, поскольку Базовые данные и привязки предназначены для простого и точного отображения данных в логических отношениях, а не в произвольном визуальном расположении в пользовательском интерфейсе. Если конец таблицы не имеет логического значения для добавленного объекта Card, вам придется проделать большую работу, чтобы он появился там.

Это плохой пользовательский интерфейс, потому что пользователь не поймет, почему вновь добавленная карта отображается в конце таблицы, когда все остальные карты отображаются в некотором логическом порядке. Если ваша таблица отсортирована по имени в алфавитном порядке, пользователь не поймет, почему в конце таблицы после «Зулу» появляется карточка с именем «Фокстрот».

Вместо этого вы должны либо отобразить новую карту в элементе пользовательского интерфейса, внешнем по отношению к таблице, и / или прокрутить таблицу до правильно отсортированного местоположения новой карты.

0 голосов
/ 02 августа 2010

По сути, вам нужно кэшировать набор отношений в отсортированном NSArray.

Создайте NSArray, который является версией отношения NSSet с [fooSet allObjects]. NSArray имеет несколько методов сортировки, которые вы можете использовать для сортировки содержимого. Когда пользователь добавляет новую карту, добавьте ее в конец массива и добавьте ее в отношение родительского объекта.

...