Date core vs. NSKeyedArchiver vs. Defaulturile utilizatorului

Datele de bază, NSKeyedArchiver și UserDefaults sunt trei modalități prin care un programator poate persista datele între lansările aplicațiilor. Deși datele de bază sunt puțin mai complicate, este util atunci când informațiile stocate necesită structură. NSKeyedArchiver este mai puțin complex și mai lent decât datele de bază, dar este mult mai simplu de utilizat. UserDefaults este cea mai simplă metodă de a persista datele.

Date principale

Principalele beneficii ale datelor de bază includ:

  1. capacitatea de a interoga eficient
  2. datele sunt structurate astfel încât fiecare entitate are anumite atribute (gândește proprietăți cu tipuri specifice) și poate sau nu se raportează la alte entități prin relații
  3. migrații automate - practic asta înseamnă doar când creezi un model de date de bază, se creează o bază de date SQLite. Dacă ulterior modificați modelul de date (de exemplu, adăugați mai multe atribute modelului de date), noul model de date nu este compatibil cu magazinul persistent inițial. Apple gestionează această „migrare” de la o versiune de model de date la alta pentru noi - mulțumim Apple !!

Înainte de a săpa în cod, mai întâi, trecem prin câteva definiții:

  1. NSPersistentContainer este responsabil pentru citirea / scrierea datelor de bază.
  2. viewContext de tipul NSManagedObjectContext. Creați o instanță a unui obiect de date de bază prin NSManagedObjectContext.

Pentru a integra datele de bază în proiectul dvs., trebuie mai întâi să creați un fișier de date .xcdatamodel de bază. În acest fișier veți defini entitățile, inclusiv atributele fiecărei entități, pe care doriți să le persistați. După crearea fișierului .xcdatamodel, apoi adăugați un nou fișier .swift la proiect care va încorpora tot codul plăcii cazanului pentru datele codului. Trei lucruri de notat în codul de mai jos -

  1. numele NSPeristentContainer TREBUIE să fie același cu fișierul .xcdatamodel.
  2. Am creat un singleton astfel încât pe tot parcursul aplicației să existe o singură dată informația salvată prin datele de bază. Dacă sunteți curioși în legătură cu modelele de singleton / design în general, consultați acest blog.
  3. Nu uitați să importați CoreData în fișierul .swift!

* Dacă creați un proiect nou și alegeți să adăugați date de bază în proiect, codul plăcii cazanului de mai sus va apărea în delegatul aplicației.

În plus față de salvarea datelor, șansele sunt că, de asemenea, doriți să obțineți aceste date pentru a popula aplicația la următoarea lansare a aplicației. Să presupunem că ați făcut o entitate în fișierul .xcdatamodel numit „Carte”. După cum puteți vedea în codul de mai jos, preluăm date folosind NSFetchRequest. Am creat un tablou, numit „Cărți”, care este egal cu [Carte] (), ceea ce înseamnă un tablou al entității Book. Ori de câte ori vreau să-mi populez aplicația cu aceste date salvate, apelez la acest CoreDataModel.sharedInstance.fetchWorkoutData () func și stabilesc datele cu care vreau să lucrez egal cu CoreDataModel.sharedInstance.books.

Ștergerea informațiilor din datele de bază este, de asemenea, foarte simplă - tot ce trebuie să faceți este să obțineți informațiile stocate și să iterați prin tablou și să ștergeți fiecare obiect din containerul persistent. Voila!

Nu m-am delectat în relații în acest post, dar blogul următor se scufunde în scrierea codului pentru relațiile din datele de bază.

NSKeyedArchiver

NSKeyedArchiver oferă posibilitatea de a interacționa direct cu discul. Mai exact, serializează NSCoding, care este un protocol cu ​​două metode:

  1. codare (cu aCoder: NSCoder)
  2. init? (coder aDecoder: NSCoder)

În exemplul de mai jos, scopul meu este de a persista o serie de [Persoane]. Persoana de clasă are două proprietăți: firstName (de tip String) și lastName (de tip String). După cum puteți vedea din codul de mai jos, clasa Persoană adoptă și se conformează protocolului NSCoding.

Stocarea și regăsirea datelor prin NSKeyedArchiver este foarte simplă. Când doriți să stocați informații, puteți apela doar la NSKeyedArchiver.archiveRootObject - aceasta este o metodă încorporată.

În mod similar, când doriți să recuperați datele persistente, puteți apela la o altă funcție încorporată, NSKeyedUnarchiver.unarchiveObject.

După cum puteți vedea, NSKeyedArchiver este mult mai simplu de implementat decât Core Data și este o opțiune atractivă pentru a persista datele.

Valorile implicite ale utilizatorului

UserDefaults este o clasă care permite stocarea simplă a diferitelor tipuri de date. Este utilizat în principal pentru a stoca cantități mici de date pentru a persista între lansările de aplicații sau restarturile dispozitivului. UserDefaults poate stoca tipuri de bază (bool, float, double, int, etc) și tipuri mai complexe (array, dicționar). Deși UserDefaults nu are nicio structură, se spune că este mai rapid decât datele de bază, deoarece tot ce este este este perechile de valori cheie. Deoarece nu are nicio structură, este util să stocați date care nu necesită structură - deci preferințele utilizatorului.

Un lucru de remarcat este dacă resetați o cheie, datele salvate vor fi înlocuite. ACUM ambele taste TREBUIE SĂ ESTE ACEASĂ - dacă o singură cheie are toate literele minuscule, iar a doua cheie are o literă mare, datele existente nu vor fi înlocuite.

Mulțumim pentru lectură și codificare fericită !!

Referințe:

https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults