Асноўныя дадзеныя супраць NSKeyedArchiver па змаўчанні

Асноўныя дадзеныя, NSKeyedArchiver і UserDefaults - гэта тры спосабы, у якіх праграміст можа захоўваць дадзеныя паміж запускамі прыкладанняў. Хоць асноўныя дадзеныя некалькі складаней, яны карысныя, калі захаваная інфармацыя патрабуе структуры. NSKeyedArchiver менш складаны і павольны, чым асноўныя дадзеныя, але значна прасцей у выкарыстанні. UserDefaults - самы просты спосаб захавання дадзеных.

Асноўныя дадзеныя

Да асноўных пераваг асноўных дадзеных адносяцца:

  1. здольнасць эфектыўна запытаць
  2. дадзеныя структураваны такім чынам, што ў кожнага суб'екта ёсць пэўныя атрыбуты (уласцівасці мыслення з пэўнымі тыпамі) і могуць ці не могуць ставіцца да іншых утварэнняў праз адносіны
  3. аўтаматычныя міграцыі - у асноўным гэта проста азначае, што пры стварэнні асноўнай мадэлі дадзеных ствараецца база дадзеных SQLite. Калі пасля змяніць мадэль дадзеных (напрыклад, дадаць больш атрыбутаў у мадэль дадзеных), новая мадэль дадзеных не сумяшчальная з першапачатковым пастаянным сховішчам. Apple вырашае гэтую "міграцыю" з адной версіі мадэлі дадзеных на іншую для нас - дзякуй Apple !!

Перад тым, як капаць код, спачатку прааналізуем некаторыя вызначэнні:

  1. NSPersistentContainer нясе адказнасць за чытанне / запіс асноўных дадзеных.
  2. viewContext тыпу NSManagedObjectContext. Вы ствараеце асобнік асноўнага аб'екта дадзеных праз NSManagedObjectContext.

Каб інтэграваць асноўныя дадзеныя ў свой праект, неабходна спачатку стварыць .xcdatamodel файл дадзеных. У гэтым файле вы вызначыце сутнасці, у тым ліку атрыбуты кожнага суб'екта, якія вы хочаце захаваць. Пасля стварэння .xcdatamodel файла, затым дадайце новы .swift файл у праект, які будзе ўключаць у сябе ўвесь код пласціны катла для дадзеных кода. Тры рэчы, якія трэба адзначыць у кодзе ніжэй -

  1. Імя NSPeristentContainer павінна быць такім жа, як і .xcdatamodel файл.
  2. Я стварыў сінглтон, так што на працягу ўсяго курсу прыкладання ёсць толькі адзін раз асобнік інфармацыі, захаванай праз асноўныя дадзеныя. Калі вам цікава аднолькавыя формы / шаблоны дызайну ў цэлым, праглядзіце гэты блог.
  3. Не забудзьцеся імпартаваць CoreData ў файл .swift!

* Калі вы ствараеце новы праект і вырашыце дадаць асноўныя дадзеныя ў праект, код пласціны катла вышэй з'явіцца ў дэлегу прыкладанняў.

У дадатак да захавання дадзеных, шанцы вы таксама хочаце, каб атрымаць гэтыя дадзеныя для папаўнення вашага прыкладання пры наступным запуску прыкладання. Дапусцім, вы стварылі сутнасць у файле .xcdatamodel пад назвай "Кніга". Як вы можаце бачыць у кодзе ніжэй, вы атрымліваеце дадзеныя з дапамогай NSFetchRequest. Я стварыў масіў, званы "Кнігі", які роўны [Book] (), што азначае масіў сутнасці Кнігі. Кожны раз, калі я хачу запоўніць сваё прыкладанне гэтымі захаванымі дадзенымі, я заклікаю гэты функцыянал CoreDataModel.sharedInstance.fetchWorkoutData () і ўсталёўваю дадзеныя, якія я хачу працаваць з роўнымі CoreDataModel.sharedInstance.books.

Выдаленне інфармацыі з асноўных дадзеных таксама вельмі проста - усё, што вам трэба зрабіць, гэта атрымаць захаваную інфармацыю і перабраць масіў і выдаліць кожны аб'ект з пастаяннага кантэйнера. Вуаля!

Я не паглыбляўся ў адносіны ў гэтым пасце, але наступны блог пагружаецца ў напісанне кода для адносін у асноўных дадзеных.

NSKeyedArchiver

NSKeyedArchiver забяспечвае магчымасць непасрэднага ўзаемадзеяння з дыскам. У прыватнасці, ён серыялізуе NSCoding, які ўяўляе сабой пратакол з двума метадамі:

  1. кадаваць (з aCoder: NSCoder)
  2. init? (кодэр aDecoder: NSCoder)

У прыкладзе ніжэй, мая мэта складаецца ў захаванні масіву [Person]. Асоба класа мае дзве ўласцівасці: firstName (тыпу String) і lastName (тыпу String). Як вы бачыце з кода ніжэй, Person класа прымае і адпавядае пратаколу NSCoding.

Захоўванне і пошук дадзеных праз NSKeyedArchiver вельмі просты. Калі вы хочаце захаваць інфармацыю, вы можаце проста патэлефанаваць на NSKeyedArchiver.archiveRootObject - гэта ўбудаваны метад.

Сапраўды гэтак жа, калі вы хочаце атрымаць захаваныя дадзеныя, вы можаце выклікаць іншую ўбудаваную функцыю - NSKeyedUnarchiver.unarchiveObject.

Як бачыце, NSKeyedArchiver значна прасцей у рэалізацыі, чым Core Data, і з'яўляецца прывабным варыянтам захавання дадзеных.

Параметры карыстальніка па змаўчанні

UserDefaults - гэта клас, які дазваляе проста захоўваць розныя тыпы дадзеных. Ён у асноўным выкарыстоўваецца для захоўвання невялікіх аб'ёмаў дадзеных, якія захоўваюцца паміж запускамі прыкладанняў або перазагрузкай прылад. UserDefaults можа захоўваць асноўныя тыпы (bool, float, double, int і г.д.) і больш складаныя тыпы (масіў, слоўнік). Хоць UserDefaults не мае структуры, гэта, як кажуць, хутчэй, чым асноўныя дадзеныя, таму што ўсё гэта пары ключавых значэнняў. Паколькі ён не мае структуры, карысна захоўваць дадзеныя, якія не патрабуюць структуры - значыць, налады карыстальніка.

Варта адзначыць, што калі вы скінеце ключ, захаваныя дадзеныя будуць замененыя НАДАЛЬНА, АБОЕ КЛІКАВАННІ ПАВЯРЖАЦЬСЯ - калі ў адной клавішы ёсць усе малыя літары, а ў другой - адна вялікая літара.

Дзякуй за чытанне і шчаслівае кадаванне !!

Літаратура:

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