Multiple pobrać sterowniki (i ewentualnie kilka podmiotów) jest złe podejście . Prawidłowym rozwiązaniem jest użycie parametru sectionNameKeyPath
do NSFetchedResultController
, aby zgrupować wyniki w wielu sekcjach. Jeśli myślisz o swoich bytach inaczej, być może są one w rzeczywistości tym samym bytem, a zamiast tego możesz użyć właściwości itemType, którą możesz następnie podzielić (i musisz również ją posortować). Na przykład. twierdząc, że miałem obiekty Chmiel i Ziarno, to mogłem je zmienić na Składnik i mieć int_16 właściwość składnikaType, które następnie będę mieć wyliczenie w kodzie do przechowywania wartości hopType = 0
, . Po tym wszystkim składnik to tylko nazwa i waga, które obie te części.
Jeśli jednak twoje obiekty rzeczywiście mają odrębny zestaw właściwości, właściwym rozwiązaniem jest utworzenie abstrakcyjnej jednostki nadrzędnej, która ma właściwość, której można użyć do podziału, np. sortOrder, sectionID lub type. Po utworzeniu kontrolera pobierania i pobraniu abstrakcyjnej jednostki nadrzędnej otrzymujesz wyniki zawierające wszystkie podelementy. Np. W aplikacji Notes mają abstrakcyjną jednostkę NoteContainer zawierającą podelementy Konto i folder.W ten sposób mogą używać jednego kontrolera pobierania, aby wyświetlić konto w pierwszej komórce w sekcji, a następnie mieć wszystkie foldery w następujących komórkach. Na przykład. Wszystkie notatki iCloud (w rzeczywistości to konto), następnie Notatki (jest folder domyślny), a następnie wszystkie foldery niestandardowe, a następnie folder kosza. Używają właściwości sortOrder, a domyślny folder to 1, wszystkie foldery niestandardowe to 2, a kosza 3. Następnie, dodając to jako deskryptor sortowania, mogą one wyświetlać komórki w żądanej kolejności. To trochę różni się od twoich wymagań, ponieważ mają one dwie jednostki wymieszane w różnych sekcjach, ale nadal możesz z nich korzystać tylko z różnymi właściwościami sortowania.
Morał z tej historii to nie walcz z frameworkiem, obejmij go :-)
Dzięki za szczegółową odpowiedź. Ta część wydaje się dość prosta, ale istnieją 2 inne metody, których nie jestem pewien (co robią i czy wymagają zmian): http://pastebin.ca/1805761 – indragie
To zależy od tego, co aplikacja robi; trudno mi odpowiedzieć, nie wiedząc o wiele więcej na temat aplikacji, projektowania itp. Jednak prawdopodobnie masz bezpieczny wybór, po prostu mając te metody, wyślij widok tabeli z komunikatem reloadData. – Giao
Zarządzane, aby to działało z małym majsterkowaniem :-) Dzięki – indragie