Все эти баги типа «NSOrderedSet был добавлен позже и, следовательно, не должен нормально работать с другими компонентами» сводят меня с ума…
(https://twitter.com/kubanekl/status/413447039855640576) эм>
У меня есть два управляемых объекта и упорядоченное отношение 1:N между ними, которое поддерживается экземпляром (или, точнее, подклассом) NSOrderedSet
. Я хочу управлять этими отношениями с помощью NSArrayController
, чтобы извлечь выгоду из функций, которые он предлагает (управление выбором, привязка контента, привязки к представлениям, таким как NSTableView
).
Поскольку NSOrderedSet
не является подклассом NSSet
, привязка contentSet
к NSArrayController
не работает с этим отношением. Я нашел следующий поток и попытался реализовать упомянутые там предложения.
Первое предложение — использовать привязку contentArray
и преобразователь значений для преобразования упорядоченного набора в массив на лету. Проблема с этим решением заключается в переназначении контента каждый раз, когда вносятся изменения, а это не то, что мне нужно.
Второе предложение, представленное в упомянутой ветке, — использовать привязку contentArray
и применить оператор @array
к пути ключа модели. Я пробовал это, но базовая связь вообще не затрагивалась при добавлении/удалении объектов через NSArrayController
.
Другой вариант, который я нашел, — это использование дескрипторов сортировки с привязкой contentSet
. Для этого потребуется сделать отношение неупорядоченным, чтобы contentSet
привязка работала, и ввести новый атрибут, используемый специально для управления порядком. Кроме того, для реализации этого потребовался бы индивидуальный механизм заказа, что испортило бы модель. Честно говоря, я хотел бы избежать этого решения.
Мой вопрос довольно ясен: есть ли способ управлять упорядоченными отношениями Core Data с помощью NSArrayController
? Если да, то какой лучший способ причинить как можно меньше боли?