W Core Data nie ma „rodzimej” tablicy ani typu słownika. Możesz przechowywać atrybut NSArray
lub an NSDictionary
jako atrybut podlegający transformacji. Spowoduje to użycie NSCoding
do serializacji tablicy lub słownika do NSData
atrybutu (i odpowiedniej deserializacji po uzyskaniu dostępu). Zaletą tego podejścia jest to, że jest to łatwe. Wadą jest to, że nie możesz wykonywać zapytań do tablicy lub słownika (jest przechowywany jako BLOB w magazynie danych) i jeśli zbiory są duże, być może będziesz musiał przenieść wiele danych do / z magazynu danych (jeśli jest magazyn danych SQLite), aby odczytać lub zmodyfikować niewielką część kolekcji.
Alternatywą jest użycie relacji Core Data do wielu w celu modelowania semantyki kolekcji tablicy lub słownika. Tablice są łatwiejsze, więc zacznijmy od tego. Relacje Core Data to-many w rzeczywistości modelują zestaw, więc jeśli potrzebujesz funkcji przypominającej tablicę, musisz albo posortować zestaw (użycie właściwości pobranej jest wygodnym sposobem, aby to zrobić) lub dodać dodatkowy atrybut indeksu do encji który przechowuje elementy tablicy i samodzielnie zarządza indeksami. Jeśli przechowujesz jednorodną tablicę (wszystkie wpisy są tego samego typu), łatwo jest modelować opis jednostki dla jednostek tablicy. Jeśli nie, będziesz musiał zdecydować, czy użyć przekształcalnego atrybutu do przechowywania danych pozycji, czy też utworzyć rodzinę jednostek pozycji.
Modelowanie słownika będzie prawdopodobnie wymagało relacji to-many z zestawem jednostek, które przechowują klucz i wartość. Zarówno klucz, jak i wartość są analogiczne do jednostki pozycji dla tablicy, opisanej powyżej. Mogą więc być typami natywnymi (jeśli znasz je z wyprzedzeniem), atrybutem podlegającym transformacji lub relacją do instancji z rodziny jednostek specyficznych dla typu.
Jeśli to wszystko brzmi trochę zniechęcająco, to tak. Przetwarzanie dowolnych danych do struktury zależnej od schematu, takiej jak Core Data, jest trudne.
W przypadku danych strukturalnych, takich jak adresy, prawie zawsze łatwiej jest poświęcić czas na jawne modelowanie jednostek (np. Atrybut dla każdej części adresu). Oprócz unikania całego dodatkowego kodu do modelowania słownika, sprawia to, że interfejs użytkownika jest łatwiejszy (powiązania „po prostu działają”), a logika walidacji itp. Jest znacznie bardziej przejrzysta, ponieważ większość z nich może być obsługiwana przez Core Data.
Aktualizacja
Począwszy od systemu OS X 10.7, dane podstawowe zawierają uporządkowany typ zestawu, którego można użyć zamiast tablicy. Jeśli możesz kierować reklamy na wersję 10.7 lub nowszą, jest to najlepsze rozwiązanie dla uporządkowanych (przypominających tablicę) kolekcji.