Osnovni podatki v primerjavi z nastavitvami privzetih uporabnikov NSKeyedArchiver v primerjavi z uporabniškimi nastavitvami

Osnovni podatki, NSKeyedArchiver in UserDefaults so trije načini, s katerimi lahko programer obdrži podatke med zagonom aplikacij. Čeprav so osnovni podatki nekoliko bolj zapleteni, so uporabni, kadar shranjene informacije zahtevajo strukturo. NSKeyedArchiver je manj zapleten in počasnejši od osnovnih podatkov, vendar je veliko enostavnejši za uporabo. UserDefaults je najpreprostejši način za obdržati podatke.

Osnovni podatki

Glavne prednosti osnovnih podatkov vključujejo:

  1. sposobnost učinkovitega poizvedovanja
  2. podatki so strukturirani tako, da ima vsaka entiteta določene atribute (miselne lastnosti z določenimi vrstami) in se lahko nanašajo ali ne na druge subjekte prek odnosov
  3. avtomatske migracije - v bistvu to samo pomeni, ko ustvarite model jedrnih podatkov, se ustvari baza podatkov SQLite. Če pozneje spremenite podatkovni model (npr. Dodate več atributov v podatkovni model), novi podatkovni model ni združljiv s prvotno obstojno shrambo. Apple za nas to "migracijo" prenaša z ene različice podatkovnega modela na drugo - hvala Apple !!

Preden se lotite kode, najprej preučimo nekaj opredelitev:

  1. NSPersistentContainer je odgovoren za branje / pisanje v osnovne podatke.
  2. viewContext tipa NSManagedObjectContext. Skozi NSManagedObjectContext ustvarite primerek jedrnega podatkovnega objekta.

Če želite vključiti osnovne podatke v svoj projekt, morate najprej ustvariti datoteko .xcdatamodel z osnovnimi podatki. V tej datoteki boste definirali entitete, vključno z atributi vsake entitete, ki jih želite obdržati. Ko ustvarite datoteko .xcdatamodel, nato projektu dodajte novo datoteko .swift, ki bo vsebovala vso kodo plošče kotla za podatke o kodi. Tri stvari, ki jih je treba upoštevati v spodnji kodi -

  1. ime NSPeristentContainer MORA biti isto kot datoteka .xcdatamodel.
  2. Ustvaril sem singleton, tako da je skozi celoten potek aplikacije le enkrat primerek informacij, shranjenih s ključnimi podatki. Če vas zanimajo singletons / modeli vzorcev na splošno, si oglejte ta blog.
  3. Ne pozabite uvoziti CoreData v datoteko .swift!

* Če ustvarite nov projekt in izberete, da v projekt dodate osnovne podatke, bo zgornja koda plošče kotla prikazana v aplikacijskem delegatu.

Poleg shranjevanja podatkov boste verjetno želeli tudi te podatke pridobiti, da bodo vašo aplikacijo napolnili naslednjič, ko se aplikacija zažene. Recimo, da ste ustvarili entiteto v datoteki .xcdatamodel z imenom "Knjiga". Kot lahko vidite v spodnji kodi, podatke pridobite s pomočjo NSFetchRequest. Ustvaril sem matriko, imenovano "Knjige", ki je enaka [Book] (), kar pomeni matriko entitete Book. Kadarkoli želim svojo aplikacijo napolniti s temi shranjenimi podatki, pokličem to funkcijo CoreDataModel.sharedInstance.fetchWorkoutData () in nastavim podatke, s katerimi želim delati, enako kot CoreDataModel.sharedInstance.books.

Odstranjevanje informacij iz jedrnih podatkov je tudi zelo preprosto - vse, kar morate storiti, je, da shranite shranjene podatke in iterate skozi matriko in izbrišete vsak predmet iz obstojnega vsebnika. Voila!

V odnosih v tej objavi se nisem poglobil, toda naslednji blog se spušča v pisanje kode za razmerja v osnovnih podatkih.

NSKeyedArchiver

NSKeyedArchiver omogoča neposredno interakcijo z diskom. Konkretno serializira NSCoding, ki je protokol z dvema načinoma:

  1. kodiranje (z aCoderjem: NSCoder)
  2. init? (koder aDecoder: NSCoder)

V spodnjem primeru je moj cilj vztrajati niz [Oseba]. Oseba razreda ima dve lastnosti: firstName (vrste String) in lastName (vrste String). Kot je razvidno iz spodnje kode, razred Person prevzame in ustreza protokolu NSCoding.

Shranjevanje in iskanje podatkov prek NSKeyedArchiver je zelo enostavno. Ko želite shraniti podatke, lahko samo pokličete na NSKeyedArchiver.archiveRootObject - to je vgrajena metoda.

Podobno, ko želite pridobiti obstojne podatke, lahko pokličete še eno vgrajeno funkcijo, NSKeyedUnarchiver.unarchiveObject.

Kot vidite, je NSKeyedArchiver veliko preprostejši za izvedbo kot Core Data in je privlačna možnost za obdržati podatke.

Privzete nastavitve za uporabnike

UserDefaults je razred, ki omogoča preprosto shranjevanje različnih vrst podatkov. Uporablja se predvsem za shranjevanje majhnih količin podatkov za obstoj med zagonom aplikacij ali ponovnim zagonom naprave. Uporabniške nastavitve lahko shranijo osnovne vrste (bool, float, double, int itd.) In bolj zapletene vrste (matrika, slovar). Čeprav UserDefaults nima strukture, naj bi bil hitrejši od jedrnih podatkov, ker so to le ključni pari vrednosti. Ker nima strukture, je koristno hraniti podatke, ki ne potrebujejo strukture - torej uporabniške nastavitve.

Upoštevati je treba, da če ponastavite ključ, bodo shranjeni podatki zamenjani TAKOJ oba ključa MORA BITI ISTA - če ima ena tipka vse male črke, druga tipka pa eno veliko črko, se obstoječi podatki ne bodo zamenjali.

Hvala za branje in srečno kodiranje !!

Reference:

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