Я смущен так же, как и Джошуа - что говорит мне о том, что, возможно, у вас нет четкой картины того, чего вы пытаетесь достичь, или что это несколько сложно (оба?)
Мое лучшее предположение, что у вас есть что-то вроде:
Виджет сущности
Атрибуты:
Отношения
- outputWidgets << - >> Widget
- inputWidgets << - >> Widget
(где согласно стандарту a - >> - это отношение ко многим, а << - >> - это отношение ко многим с обратным отношением ко многим).
Таким образом, каждый виджет будет хранить набор виджетов, которые он имеет в качестве выходных данных, и набор виджетов, которые он имеет в качестве входных данных.
Таким образом, определенный виджет поддерживает набор inputWidgets и outputWidgets. Каждое из этих отношений также переворачивается, чтобы вы могли - для любого из виджетов на входе или выходе - увидеть, что ваш виджет находится в их списке входов или выходов.
Хотя это чертовски уродливо.
Я думаю, что ваш вопрос заключается в том, как достичь вышеизложенного при обозначении отношений Вы упоминаете, что хотите иметь строковый идентификатор (уникальный?) Для каждого отношения.
Вы можете сделать это через:
Где вы создаете новый widgetNamedRelationship для каждого двустороннего отношения. Обратите внимание, что я предполагаю, что все отношения являются двусторонними.
Тогда для каждого виджета у вас есть набор именованных входов и именованных выходов. Это также позволяет прикреплять виджеты к себе, но только если есть отдельные входные и выходные шины.
Итак, для вашего примера "age" в вашем классе реализации для экземпляра Widget с именем aWidget у вас будет что-то вроде:
NSPredicate * agePredicate = [NSPredicate finalateWithFormat: @ "name = 'age'"];
NSSet * ageInputs = [aWidget.inputs FilterSetUsingPredicate: agePredicate];
Понял ли я вопрос?