Põhiandmed vs NSKeyedArchiver vs kasutaja vaikesätted

Põhiandmed, NSKeyedArchiver ja UserDefaults on kolm viisi, kuidas programmeerija saab andmeid rakenduste käivituste vahel säilitada. Ehkki põhiandmed on pisut keerukamad, on neist kasu, kui salvestatud teave nõuab struktuuri. NSKeyedArchiver on vähem keerukas ja aeglasem kui põhiandmed, kuid seda on palju lihtsam kasutada. UserDefaults on lihtsaim meetod andmete säilitamiseks.

Põhiandmed

Põhiandmete peamised eelised on järgmised:

  1. võime tõhusalt päringuid teha
  2. andmed on üles ehitatud nii, et igal olemil on teatud atribuudid (konkreetsete omadustega mõtlemisomadused) ja need võivad suhete kaudu olla seotud teiste üksustega või mitte
  3. automaatsed ränded - põhimõtteliselt tähendab see põhiandmemudeli loomisel SQLite'i andmebaasi loomist. Kui muudate hiljem andmemudelit (nt lisate andmemudelile rohkem atribuute), ei ühildu uus andmemudel algse püsipoega. Apple tegeleb meie jaoks selle migratsiooniga ühest andmemudeli versioonist teise - aitäh Apple'ile !!

Enne koodi uurimist tutvuge kõigepealt mõne määratlusega:

  1. NSPersistentContainer vastutab põhiandmete lugemise / kirjutamise eest.
  2. viewContext tüüpi NSManagedObjectContext. Põhiandmeobjekti eksemplari saate luua NSManagedObjectContext kaudu.

Põhiandmete integreerimiseks oma projekti peate kõigepealt looma põhiandmete .xcdatamodel faili. Selles failis määratlete üksused, sealhulgas iga olemi atribuudid, mida soovite säilitada. Pärast .xcdatamodel-faili loomist lisage projektile uus .swift-fail, mis sisaldab kogu katla plaadi koodi koodiandmete jaoks. Kolm asja, mida tuleks allolevasse koodi märkida -

  1. NSPeristentContaineri nimi PEAB olema sama kui .xcdatamodel-fail.
  2. Lõin singli, nii et kogu rakenduse vältel on põhiandmete kaudu salvestatud teavet ainult üks kord. Kui teil on huvi singletonite / kujundusmustrite kohta üldiselt, siis vaadake seda ajaveebi.
  3. Ärge unustage CoreData faili .swift importida!

* Kui loote uue projekti ja otsustate projektile lisada põhiandmed, kuvatakse ülaltoodud katla plaadi kood rakenduste esindajas.

Lisaks andmete salvestamisele on tõenäoline, et soovite ka järgmised andmed hankida, et järgmine kord rakenduse käivitamisel asustada teie rakendus. Oletame, et tegite üksuse .xcdatamodel-failis nimega „Book”. Nagu näete allolevast koodist, tõmbasite andmeid NSFetchRequesti abil. Lõin massiivi nimega „Books”, mis võrdub raamatuga (), mis tähendab raamatu olemi massiivi. Kui soovin oma rakenduse selle salvestatud andmetega täita, kutsun seda funktsiooni CoreDataModel.sharedInstance.fetchWorkoutData () ja sean andmed, mida tahan töötada, võrdselt CoreDataModel.sharedInstance.books.

Teabe eemaldamine põhiandmetest on samuti väga lihtne - peate vaid hankima salvestatud teabe ja itereerima läbi massiivi ning kustutama iga objekti püsivast mahutist. Voila!

Ma pole selles postituses suhetesse süvenenud, kuid järgmine blogi sukeldub põhiandmete suhete koodi kirjutamisse.

NSKeyedArchiver

NSKeyedArchiver annab võimaluse suhelda otse kettaga. Täpsemalt, see seerialiseerib NSC-kodeerimise, mis on kahe meetodi protokoll:

  1. kodeerima (koos kooderiga: NSCoder)
  2. init? (kooder aDecoder: NSCoder)

Allolevas näites on minu eesmärk säilitada massiiv [Isik]. Klassi isikul on kaks omadust: eesnimi (tüübiga String) ja perekonnanimi (tüüpi keelpill). Nagu allolevast koodist näete, võtab klassi isik NSC kodeerimise protokolli kasutusele ja vastab sellele.

Andmete salvestamine ja hankimine NSKeyedArchiveri kaudu on väga lihtne. Kui soovite teavet talletada, võite lihtsalt helistada NSKeyedArchiver.archiveRootObject - see on sisseehitatud meetod.

Sarnaselt, kui soovite püsivaid andmeid hankida, võite helistada mõnele teisele sisseehitatud funktsioonile NSKeyedUnarchiver.unarchiveObject.

Nagu näete, on NSKeyedArchiver palju lihtsamini rakendatav kui põhiandmed ja on atraktiivne võimalus andmete säilitamiseks.

Kasutaja vaikesätted

UserDefaults on klass, mis võimaldab erinevate andmetüüpide lihtsat salvestamist. Seda kasutatakse peamiselt väikeste andmemahtude salvestamiseks, et püsida rakenduste käivitamiste või seadme taaskäivituste vahel. UserDefaults võivad salvestada põhitüüpe (bool, float, double, int jne) ja keerukamaid tüüpe (massiiv, sõnastik). Ehkki UserDefaultsil puudub struktuur, öeldakse, et see on kiirem kui põhiandmed, sest kõik see on võtmeväärtuste paar. Kuna sellel puudub struktuur, on kasulik salvestada andmeid, mis ei vaja struktuuri - seega ka kasutaja eelistusi.

Üks asi, mida tasub tähele panna, on kui võtme lähtestate, siis salvestatud andmed asendatakse KUIDAS mõlemad klahvid peavad olema samad - kui ühel klahvil on kõik väiketähed ja teisel klahvil on üks suurtäht, siis olemasolevaid andmeid ei asendata.

Täname lugemise ja õnneliku kodeerimise eest !!

Viited:

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