Core Data (CRUD) z Swift 4.2 Dla początkujących
Core Data to obiektowy wykres i struktura trwałości dostarczana przez Apple w systemach operacyjnych macOS i iOS. Został on wprowadzony w Mac OS X 10.4 Tiger I iOS z iPhone SDK 3.0. Umożliwia serializację danych zorganizowanych przez relacyjny model entity-attribute do magazynów XML, binarnych lub SQLite.
programiści, którzy dopiero zaczynają korzystać z podstawowych danych, są często zdezorientowani różnicami między SQLite a Core Data. Jeśli zastanawiasz się, czy potrzebujesz danych SQLite, czy podstawowych, zadajesz złe pytanie. Pamiętaj, że Podstawowe Dane nie są bazą danych.
SQLite:
- posiadają funkcję ograniczenia danych.
- działa na danych zapisanych na dysku.
- może upuścić tabelę i edytować dane bez ładowania ich do pamięci.
- wolne w porównaniu do danych podstawowych.
Podstawowe Dane:
- nie mają ograniczeń danych, jeśli jest to wymagane, należy je zaimplementować za pomocą logiki biznesowej.
- działa w pamięci.(dane muszą być załadowane z dysku do pamięci)
- muszą załadować całe dane, jeśli chcemy upuścić tabelę lub zaktualizować.
- Szybki pod względem tworzenia rekordów.(ich oszczędność może być czasochłonna)
dodatkowo oprócz SQLite jako back-end Core dane mogą używać formatu XML lub binarnego do przechowywania danych na dysku.
ograniczenia danych podstawowych
mimo że dane podstawowe są fantastyczną strukturą, istnieje kilka wad. Wady te są bezpośrednio związane z charakterem RAM i sposobem ich działania.
Core Data może działać tylko dlatego, że przechowuje Wykres obiektu, którym zarządza, w pamięci. Oznacza to, że może działać tylko na płytach, gdy są w pamięci. To bardzo różni się od wykonywania zapytania SQL na bazie danych. Jeśli chcesz usunąć tysiące rekordów, Core Data musi najpierw załadować każdy rekord do pamięci. Jest rzeczą oczywistą, że powoduje to problemy z pamięcią i wydajnością, jeśli są wykonywane nieprawidłowo.
kolejnym ważnym ograniczeniem jest model gwintowania podstawowych danych. Framework ma być uruchomiony na jednym wątku. Na szczęście Podstawowe Dane ewoluowały dramatycznie przez lata, a framework wprowadził różne rozwiązania, aby praca z podstawowymi danymi w środowisku wielowątkowym była bezpieczniejsza i łatwiejsza.
w przypadku aplikacji, które muszą zarządzać złożonym wykresem obiektów, Dane podstawowe są doskonałym rozwiązaniem. Jeśli potrzebujesz tylko przechowywać kilka niepowiązanych obiektów, możesz lepiej skorzystać z lekkiego rozwiązania lub systemu domyślnego użytkownika.
Core Data Demo (Tworzenie, pobieranie, aktualizowanie i usuwanie)
aby zademonstrować podstawy podstawowych danych, stwórzmy aplikację single view iOS z wybranym modułem danych podstawowych.
najpierw stwórzmy nowy projekt i wybierzmy „użyj podstawowych danych”. Chociaż możesz dodać ten framework do istniejącego projektu, łatwiej jest go dodać z tego miejsca, ponieważ wszystko będzie już podłączone za Ciebie.Po utworzeniu projektu zobaczysz plik taki jak CoreDataTest.dodał xcdatamodeld
po kliknięciu zobaczysz narzędzie, które pozwala skonfigurować jednostki reprezentujące modele danych. Możesz zdefiniować kilka rzeczy dla każdej jednostki, ale dla nas atrybuty i relacje będą najważniejsze.
teraz stworzyliśmy projekt demonstracyjny z obsługą podstawowych danych. Istnieją dwie znaczące zmiany w tym szablonie Xcode, które możemy łatwo zaobserwować, a mianowicie
- nowy plik CoreDataCRUD.xcdatamodeld
- AppDelegate.plik swift z kodem Core Data Stack
Core Data Stack
Kod Core Data Stack wewnątrz AppDelegate.swift ma jasną dokumentację w postaci komentarzy, ale w skrócie, ustawia persistentContainer i zapisuje dane, jeśli wystąpią jakiekolwiek zmiany. Ponieważ AppDelegate jest pierwszym plikiem, który wykonuje się zaraz po uruchomieniu aplikacji, możemy zapisać i pobrać kontekst z podstawowego stosu danych.
teraz mamy modelowane nasze dane w jednostce użytkownika. Nadszedł czas, aby dodać kilka rekordów i zapisać je w CoreData
zacznij od importu CoreData do naszego kontrolera viewcontroller.swift
Utwórz rekordy do podstawowych danych
proces dodawania rekordów do podstawowych danych ma następujące zadania
- Patrz persistentContainer z appdelegate
- Utwórz kontekst z persistentContainer
- Utwórz encję z użytkownikiem
- Utwórz nowy rekord z tym podmiotem użytkownika
- ustaw wartości dla rekordów dla każdego klucza
Pobierz dane
proces pobieranie zapisanych danych jest również bardzo łatwe. Ma następujące zadanie
- przygotować żądanie typu NSFetchRequest dla encji (User w naszym przykładzie)
- w razie potrzeby użyj predykatu dla danych filtrowania
- Pobierz wynik z kontekstu w postaci tablicy
- Iteratuj przez tablicę, aby uzyskać wartość dla określonego klucza
możemy Pobierz dane z naszej jednostki użytkowników za pomocą następującego kodu.
Update Data
dla Update record najpierw musimy pobrać / pobrać dane z predykatem jak wyżej proces pobierania danych. Następnie poniżej kilka kroków do wykonania
- przygotuj żądanie z predykatem dla encji (Użytkownik w naszym przykładzie)
- Pobierz rekord i ustaw nową wartość kluczem
- i ostatnio Zapisz kontekst taki sam jak Utwórz dane.
Delete Data
aby usunąć rekord najpierw musimy znaleźć obiekt, który chcemy usunąć za pomocą fetchRequest. następnie wykonaj poniższe kroki, aby usunąć rekord
- przygotuj żądanie z predykatem dla encji (Użytkownik w naszym przykładzie)
- Pobierz rekord i który chcemy usunąć
- i stwórz kontekst.delete (object) call (ref image attached below)
Cóż, to nie wystarczy do podstawowych danych, istnieje wiele złożonych rzeczy, które możemy zrobić z podstawowymi danymi śledzenie zmian danych, dodawanie predykatów i złożonych relacji baz danych. Gdy używasz więcej podstawowych danych, sprawy stają się bardziej złożone.