Core Data vs NSKeyedArchiver vs Paraparje të Përdoruesit

Të dhënat thelbësore, NSKeyedArchiver dhe UserDefaults janë tre mënyra me të cilat një programues mund të vazhdojë të dhënat midis nisjeve të aplikacioneve. Megjithëse të dhënat thelbësore janë pak më të komplikuara, është e dobishme kur informacioni i ruajtur kërkon strukturë. NSKeyedArchiver është më pak komplekse dhe më e ngadaltë se të dhënat thelbësore, por është shumë më e thjeshtë për t’u përdorur. UserDefaults është metoda më e thjeshtë për të vazhduar të dhënat.

Të dhënat kryesore

Përfitimet kryesore për të dhënat thelbësore përfshijnë:

  1. aftësia për të kërkuar në mënyrë efikase
  2. të dhënat janë të strukturuara në mënyrë që çdo entitet të ketë atribute të caktuara (mendoni vetitë me lloje specifike) dhe mund ose nuk mund të lidhen me entitetet e tjera përmes marrëdhënieve
  3. migrimet automatike - në thelb kjo do të thotë vetëm kur krijoni një model thelbësor të të dhënave, krijohet një bazë e të dhënave SQLite. Nëse më pas ndryshoni modelin e të dhënave (p.sh. shtoni më shumë atribute në modelin e të dhënave), modeli i ri i të dhënave nuk është i pajtueshëm me dyqanin origjinal të vazhdueshëm. Apple merret me këtë "migracion" nga një version i modelit të të dhënave në tjetrin për ne - faleminderit Apple !!

Para se të gërmoni në kod, së pari le të kalojmë disa përkufizime:

  1. NSPersistentContainer është përgjegjës për leximin / shkrimin e të dhënave thelbësore.
  2. pamjeKontesti i tipit NSManagedObjectContext. Ju krijoni një shembull të një objekti të të dhënave thelbësore përmes NSManagedObjectContext.

Për të integruar të dhënat thelbësore në projektin tuaj, së pari duhet të krijoni një skedar të të dhënave thelbësore .xcdatamodel. Brenda këtij skedari ju do të përcaktoni entitetet, përfshirë atributet e secilit entitet, që dëshironi të vazhdoni. Pasi të keni krijuar skedarin .xcdatamodel, atëherë shtoni një skedar të ri .sift për projektin që do të përfshijë të gjithë kodin e pllakës së bojlerit për të dhënat e kodit. Tre gjëra për tu shënuar në kodin më poshtë -

  1. emri NSPeristentContainer DUHET të jetë i njëjtë me skedarin .xcdatamodel.
  2. Kam krijuar një singleton në mënyrë që gjatë gjithë rrjedhës së aplikacionit të ketë vetëm një herë informacionin e ruajtur përmes të dhënave bazë. Nëse jeni kurioz për njësitë / modelet e dizajnit në përgjithësi, shikoni këtë blog.
  3. Mos harroni të importoni CoreData në skedarin .Shift!

* Nëse krijoni një projekt të ri dhe vendosni të shtoni të dhëna thelbësore në projekt, kodi i pllakës së bojlerit më lart do të paraqitet në Delegacionin e Aplikimeve.

Përveç ruajtjes së të dhënave, ka shanse që ju gjithashtu do të dëshironi të merrni ato të dhëna për të populluar aplikacionin tuaj herën tjetër që lëshon aplikacioni. Le të themi se keni bërë një entitet në skedarin .xcdatamodel të quajtur "Libër". Siç mund ta shihni në kodin më poshtë, ju tërheq të dhënat duke përdorur NSFetchRequest. Kam krijuar një grup, të quajtur "Libra", i cili është i barabartë me [Librin] (), që do të thotë një grup i entitetit të Librit. Kurdoherë që dua të populloj aplikacionin tim me këto të dhëna të ruajtura, unë i bëj thirrje këtij funksioni CoreDataModel.sharedInstance.fetchWorkoutData () dhe të vendos të dhënat që dua të punoj me të barabarta me CoreDataModel.sharedInstance.book.

Heqja e informacionit nga të dhënat thelbësore është gjithashtu shumë e thjeshtë - gjithçka që duhet të bëni është të merrni informacionin e ruajtur dhe të përsëriteni nëpër rrjetë dhe të fshini çdo objekt nga ena e vazhdueshme. Voila!

Unë nuk kam paraqitur marrëdhënie në këtë post, por blogu i mëposhtëm zhytet në shkrimin e kodit për marrëdhëniet në të dhënat thelbësore.

NSKeyedArchiver

NSKeyedArchiver ofron mundësinë për të bashkëvepruar drejtpërdrejt me disk. Konkretisht, ai serializon NSCoding, i cili është një protokoll me dy metoda:

  1. kodoj (me një kod: NSCoder)
  2. iniciativë? (koduesi aDekoderi: NSCoder)

Në shembullin e mëposhtëm, qëllimi im është të vazhdoj një grup të [Person]. Personi i klasës ka dy veti: emrin e parë (të llojit String) dhe mbiemrin (të llojit String). Siç mund ta shihni nga kodi më poshtë, Personi i klasës miraton dhe përputhet me protokollin NSCoding.

Ruajtja dhe marrja e të dhënave përmes NSKeyedArchiver është shumë e thjeshtë. Kur dëshironi të ruani informacione, thjesht mund të telefononi në NSKeyedArchiver.archiveRootObject - kjo është një metodë e integruar.

Në mënyrë të ngjashme, kur doni të merrni të dhëna të vazhdueshme, mund të telefononi në një funksion tjetër të integruar, NSKeyedUnarchiver.unarchiveObject.

Siç mund ta shihni, NSKeyedArchiver është shumë më e thjeshtë për tu zbatuar sesa Core Data dhe është një mundësi tërheqëse për të vazhduar të dhënat.

Paraqitjet e përdoruesit

UserDefaults është një klasë që lejon ruajtjen e thjeshtë të llojeve të ndryshme të të dhënave. Kryesisht përdoret për të ruajtur sasi të vogla të të dhënave për të vazhduar midis fillimit të aplikacioneve ose rifillimit të pajisjes. UserDefaults mund të ruajë llojet themelore (bool, float, double, int, etj) dhe llojet më komplekse (varg, fjalor). Megjithëse UserDefaults nuk ka strukturë, thuhet se është më e shpejtë se të dhënat thelbësore sepse gjithçka është është çiftet e vlerës kryesore. Meqenëse nuk ka strukturë, është e dobishme të ruani të dhëna që nuk kërkojnë strukturë - pra, preferencat e përdoruesit.

Një gjë që duhet të theksohet është nëse rivendosni një çelës, të dhënat e ruajtura do të zëvendësohen SI DUHET T both dy çelësat DUHET T THE B BENI NJ T NDRMJET - nëse një çelës ka të gjitha shkronjat e vogla dhe çelësi i dytë ka një shkronjë të madhe, të dhënat ekzistuese nuk do të zëvendësohen.

Faleminderit për leximin dhe kodimin e lumtur !!

Referencat:

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