Základní data vs. NSKeyedArchiver vs. výchozí nastavení uživatelů

Základní data, NSKeyedArchiver a UserDefaults jsou tři způsoby, jak může programátor přetrvávat data mezi spuštěním aplikace. Ačkoli základní data jsou o něco složitější, je užitečné, když uložené informace vyžadují strukturu. NSKeyedArchiver je méně složitý a pomalejší než základní data, ale jeho použití je mnohem jednodušší. UserDefaults je nejjednodušší metoda pro přetrvávání dat.

Základní data

Mezi hlavní výhody základních údajů patří:

  1. schopnost efektivního dotazování
  2. data jsou strukturována tak, že každá entita má určité atributy (vlastnosti vlastností se specifickými typy) a může nebo nemusí souviset s jinými entitami prostřednictvím vztahů
  3. automatické migrace - v podstatě to znamená, že když vytvoříte základní datový model, vytvoří se databáze SQLite. Pokud následně změníte datový model (např. Do datového modelu přidáte další atributy), nový datový model není kompatibilní s původním trvalým úložištěm. Apple pro nás tuto „migraci“ z jedné verze datového modelu do druhé zvládne - díky Apple !!

Před kopáním do kódu nejprve projdeme některé definice:

  1. NSPersistentContainer odpovídá za čtení / zápis do základních dat.
  2. viewContext typu NSManagedObjectContext. Pomocí NSManagedObjectContext vytvoříte instanci základního datového objektu.

Chcete-li do projektu integrovat základní data, musíte nejprve vytvořit soubor .xcdatamodel základních dat. V tomto souboru budete definovat entity, včetně atributů každé entity, které chcete zachovat. Po vytvoření souboru .xcdatamodel přidejte do projektu nový soubor .swift, který bude zahrnovat veškerý kód desky kotle pro kódová data. V níže uvedeném kódu je třeba poznamenat tři věci -

  1. název NSPeristentContainer MUSÍ být stejný jako soubor .xcdatamodel.
  2. Vytvořil jsem singleton, takže v celém průběhu aplikace je pouze jedna instance informací uložených prostřednictvím základních dat. Pokud vás zajímají obecně singletony / návrhové vzory, podívejte se na tento blog.
  3. Nezapomeňte importovat CoreData do souboru .swift!

* Pokud vytvoříte nový projekt a rozhodnete se přidat do projektu základní data, výše uvedený kód desky kotle se zobrazí v delegátovi aplikace.

Kromě ukládání dat je pravděpodobné, že budete chtít tato data načíst a naplnit tak vaši aplikaci při příštím spuštění aplikace. Řekněme, že jste v souboru .xcdatamodel vytvořili entitu nazvanou „Kniha“. Jak vidíte v níže uvedeném kódu, načtete data pomocí NSFetchRequest. Vytvořil jsem pole nazvané „Knihy“, které se rovná [Book] (), což znamená pole entity Book. Kdykoli chci naplnit svou aplikaci těmito uloženými daty, vyzývám tuto funkci CoreDataModel.sharedInstance.fetchWorkoutData () a nastavím data, se kterými chci pracovat, rovnou CoreDataModel.sharedInstance.books.

Odstranění informací z hlavních dat je také velmi jednoduché - vše, co musíte udělat, je načíst uložené informace a iterovat skrz pole a odstranit každý objekt z trvalého kontejneru. Voila!

V tomto příspěvku jsem se neponořil do vztahů, ale následující blog se ponoří do psaní kódu pro vztahy v základních datech.

NSKeyedArchiver

NSKeyedArchiver poskytuje možnost interakce přímo s diskem. Konkrétně serializuje NSCoding, což je protokol se dvěma způsoby:

  1. enkódovat (s aCoder: NSCoder)
  2. init? (kodér aDecoder: NSCoder)

V níže uvedeném příkladu je mým cílem přetrvávat pole [Osoba]. Třída Person má dvě vlastnosti: firstName (typu String) a lastName (typu String). Jak můžete vidět z níže uvedeného kódu, třída Osoba přijímá a vyhovuje protokolu NSCoding.

Ukládání a získávání dat pomocí NSKeyedArchiver je velmi jednoduché. Pokud chcete uložit informace, stačí zavolat na NSKeyedArchiver.archiveRootObject - to je vestavěná metoda.

Podobně, pokud chcete načíst přetrvávající data, můžete zavolat jinou vestavěnou funkci, NSKeyedUnarchiver.unarchiveObject.

Jak vidíte, implementace NSKeyedArchiver je mnohem jednodušší implementace než Core Data a je atraktivní alternativou k přetrvávání dat.

Výchozí nastavení uživatele

UserDefaults je třída, která umožňuje jednoduché ukládání různých typů dat. Používá se především k ukládání malého množství dat, která přetrvávají mezi spuštěním aplikace nebo restartem zařízení. UserDefaults může ukládat základní typy (bool, float, double, int, atd.) A složitější typy (pole, slovník). Přestože UserDefaults nemá žádnou strukturu, říká se, že je rychlejší než základní data, protože vše jsou páry klíčových hodnot. Protože nemá strukturu, je užitečné ukládat data, která nevyžadují strukturu - tedy uživatelské preference.

Jedna věc, kterou si zapamatujete, je, že pokud resetujete klíč, uložená data budou nahrazena JAK SE obě klávesy MUSÍ BÝT JEDNOTNÉ - pokud jeden klíč obsahuje všechna malá písmena a druhý klíč má jedno velké písmeno, stávající data nebudou nahrazena.

Díky za čtení a šťastné kódování !!

Reference:

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