Podstawowe dane relacja wiele do wielu-pytanie predykatu

W moim podstawowym modelu danych mam dwa byty: List i Patient. List posiada atrybut "name".

Lista może mieć dowolną liczbę pacjentów i każdy pacjent może należeć do dowolnej liczby różnych list. Dlatego ustawiłem relację na liście o nazwie "pacjenci", która ma odwrotną relację do-wielu pacjentów i relację na pacjencie o nazwie "listy", która ma relację do-wielu do listy.

To, co staram się wymyślić, to jak stworzyć predykat, który wybierze wszystkich pacjentów, którzy należą do konkretnej nazwy listy.

Jak mam to zrobić? Nigdy wcześniej nie korzystałem z relacji w Core Data.

Dzięki,

Author: Peter Hosey, 2010-02-24

3 answers

Dany model danych jak:

Lista > Pacjent,

Możesz znaleźć wszystkie instancje pacjentów, które należą do listy o określonej nazwie z żądaniem pobierania na jednostce pacjenta, używając predykatu takiego jak:

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

Zakładając, że listName jest instancją NSString o żądanej nazwie listy. LIKE[cd] porównuje wielkość liter i znaki diakrytyczne.

 19
Author: Barry Wark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 18:28:24

To chyba Działa OK:

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

Gdzie myList jest rzeczywistą jednostką listy.

 14
Author: Garry Pettet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-30 06:23:52

Wygląda na to, że twój model danych jest taki:

Lista > Pacjent

Myślę, że jeśli znasz konkretną nazwę listy, to znasz konkretny obiekt listy. Jeśli tak, możesz po prostu pobrać pacjentów za pomocą relacji to-many z listy do pacjenta-jest to zestaw przedmiotów pacjenta. Na przykład, jeśli relacja z listy do pacjenta nazywa się "pacjenci":

NSSet *patientSet = listObject.patients;

Uwaga: Wymaga to utworzenia podklas dla zarządzanych obiektów, aby uzyskać dostęp do atrybuty i relacje jako właściwości na obiektach.

Jeśli z jakiegoś powodu znasz tylko nazwę listy i pobierasz Obiekty pacjenta, możesz utworzyć predykat używając relacji to-many od pacjenta do listy (Załóżmy, że nazywa się ona "lists" i nazwa listy w łańcuchu o nazwie "listName"):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY lists.name == %@",listName];
 9
Author: gerry3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-24 18:50:11