2010-02-24 11 views
20

W moim modelu danych podstawowych mam dwie jednostki: listę i pacjenta. Lista ma atrybut o nazwie "nazwa".Dane podstawowe relacja wiele-do-wielu - Pytanie wstępne

Lista może mieć dowolną liczbę pacjentów, a każdy pacjent może należeć do dowolnej liczby różnych list. W związku z tym utworzyłem relację na liście o nazwie "pacjenci", która ma odwrotny do wielu stosunek do Pacjenta i związek na Pacjencie zwany "listami", który ma wiele do relacji z Listą.

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

Co mam zrobić? Nigdy wcześniej nie stosowałem relacji w Core Data.

Dzięki,

Odpowiedz

14

To wydaje się działać OK:

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

Gdzie myList jest rzeczywisty podmiot listy.

+0

Dzięki Garry, szukałem tego rozwiązania przez chwilę, okazuje się być łatwe: P – Nick

9

Brzmi jak twój model danych jest taka:

Lista < < - >> Pacjent

Myślę, że jeśli znasz szczególną nazwę listy, to wiesz szczególny obiekt listy. Jeśli tak, możesz po prostu chwycić pacjentów stosujących relację to-many z listy do pacjenta - jest to zbiór obiektów pacjentów. Na przykład, jeśli związek z listy, aby pacjent jest nazwany „pacjentów”:

NSSet *patientSet = listObject.patients; 

Uwaga: wymaga to tworzenia podklasy dla zarządzanych obiektów, dzięki czemu można uzyskać dostęp do atrybutów i właściwości związków jak na swoich obiektach.

Jeśli z jakiegoś powodu znasz nazwę listy i pobierasz obiekty Pacjenta, możesz utworzyć predykat za pomocą relacji "to-many" od pacjenta do listy (zakładając, że ma ona nazwę "listy" i nazwę listy w ciąg o nazwie "nazwalisty"):

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

W pierwszym przykładzie (która jest poprawna jak zwykle od gerry3), można uzyskać do niego dostęp za pośrednictwem KVC bez konieczności podklasy go za pomocą 'NSSet * patientSet = [listObject valueForKey: @„pacjentów”];' –

+2

Ale w jaki sposób "przekonwertować" to do kontrolera wyników pobranych? Też mam to samo pytanie i mam odniesienie do obiektu "list", ale chciałbym mieć pobrany kontroler wyników, który pokazuje "listę.pacjenci " – Nick

+0

Właściwie nigdy nie myśl, odpowiedź z @Garry poniżej jest tym, czego szukałem – Nick

18

Biorąc pod uwagę model danych jak:

listy < < - >> pacjenta,

można znaleźć wszystkie wystąpienia pacjenta należących do listy z a konkretnie lar nazwa z prośbą zwrcania o podmiocie pacjenta za pomocą predykatu jak:

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

zakładając listName jest instancją NSString z nazwy listy chcesz. LIKE[cd] jest niewrażliwe na wielkość liter i bez znaków diakrytycznych.

+0

Mam obiekt List w pamięci i przekazuję go do podklasy UITableViewController Jak utworzyć żądanie pobrania, aby pobrać wszystkich pacjentów z tej listy ? Próbuję użyć NSFetchedResultsController i nazwa listy nie jest unikalna (więc skonstruowanie predykatu na podstawie samej nazwy może powodować błędy). – Garry

Powiązane problemy