Подтвердить что ты не робот

Основные данные о взаимоотношениях "многие-ко-многим" - вопрос с предикатом

В моей модели Core Data у меня есть два объекта: List и Patient. Список имеет атрибут под названием "имя".

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

Я пытаюсь выяснить, как создать предикат, который выберет всех пациентов, принадлежащих к определенному имени списка.

Как я могу это сделать? Я никогда не использовал отношения раньше в Core Data.

Спасибо,

4b9b3361

Ответ 1

Кажется, что это работает нормально:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];

Где myList является фактическим объектом List.

Ответ 2

Для модели данных, например:

Список < - ↔ > Пациент,

вы можете найти все экземпляры пациента, принадлежащие списку с определенным именем, с запросом на выборку на объекте пациента, используя предикат вроде:

[NSPredicate predicateWithFormat:@"ANY lists.name LIKE[cd] %@", listName]

Предполагая, что listName является экземпляром NSString с нужным именем списка. LIKE[cd] имеет нечувствительность к регистру и диакритическую чувствительность.

Ответ 3

Похоже, что ваша модель данных такова:

Список ↔ Пациент

Я бы подумал, что если вы знаете конкретное имя списка, то вы знаете конкретный объект списка. Если это так, вы можете просто захватить пациентов, используя отношения "многие" от "Список к пациенту" - это набор объектов пациента. Например, если отношение "Список к пациенту" называется "пациенты":

NSSet *patientSet = listObject.patients;

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

Если вы знаете только имя списка по какой-либо причине и вы извлекаете объекты пациента, вы можете создать предикат, используя отношения "со многими" от "Пациент к списку" (предположим, что он называется "списки" и имя списка в строка с именем "listName" ):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY lists.name == %@",listName];