Asosiy ma'lumotlar va boshqalar. NSKeyedArchiver va boshqalar

Asosiy ma'lumotlar, NSKeyedArchiver va UserDefaults - bu dasturni ishga tushirish oralig'ida ma'lumotlarni saqlashning uchta usuli. Asosiy ma'lumotlar biroz murakkabroq bo'lishiga qaramay, saqlanadigan ma'lumot tuzilishga muhtoj bo'lganda foydali bo'ladi. NSKeyedArchiver asosiy ma'lumotlarga qaraganda ancha murakkab va sekinroq, ammo ulardan foydalanish ancha sodda. UserDefaults ma'lumotlarni saqlashning eng oddiy usuli hisoblanadi.

Asosiy ma'lumotlar

Asosiy ma'lumotlarning asosiy afzalliklari quyidagilardan iborat:

  1. samarali so'rov qilish qobiliyati
  2. Ma'lumotlar shunday tuzilganki, har bir mantiqiy ob'ekt ma'lum atributlarga (o'ziga xos turlarga ega bo'lgan fikrlash xususiyatlariga) ega va munosabatlar orqali boshqa mantiqiy ob'ektlarga tegishli bo'lishi yoki bo'lmasligi mumkin.
  3. avtomatik ko'chirish - asosan, bu siz ma'lumotlarning bazaviy modelini yaratganingizda, SQLite ma'lumotlar bazasi yaratilganda anglatadi. Agar siz keyinchalik ma'lumotlar modelini o'zgartirsangiz (masalan, ma'lumotlar modeliga qo'shimcha atributlarni qo'shsangiz), yangi ma'lumotlar modeli asl doimiy do'konga mos kelmaydi. Apple ushbu "ko'chirish" ni bitta ma'lumot modelidan boshqasiga biz uchun qo'llaydi - rahmat Apple !!

Kodni o'rganishdan oldin, avval ba'zi ta'riflarni ko'rib chiqaylik:

  1. NSPersistentContainer asosiy ma'lumotlarni o'qish / yozish uchun javobgardir.
  2. NSManagedObjectContext turidagi kontekst. Siz NSManagedObjectContext orqali asosiy ma'lumotlar ob'ekti namunasini yaratasiz.

Loyihangizga yadro ma'lumotlarini kiritish uchun avval .xcdatamodel faylini yaratishingiz kerak. Ushbu faylda siz davom ettirishni istagan ob'ektlarni, shuningdek har bir ob'ektning xususiyatlarini belgilaysiz. .Xcdatamodel faylini yaratgandan so'ng, loyihaga yangi .swift faylini qo'shing, bu kod ma'lumotlari uchun barcha qozon plitalari kodini o'z ichiga oladi. Quyidagi kodda qayd etiladigan uchta narsa -

  1. NSPeristentContainer nomi .xcdatamodel fayli bilan bir xil bo'lishi kerak.
  2. Men singltonni yaratdim, shunda butun dastur davomida ma'lumotlarning faqat bir marta asosiy ma'lumotlar orqali saqlanishi kuzatiladi. Agar siz umuman singltonlar / dizayn naqshlariga qiziqsangiz, ushbu blogni tekshiring.
  3. CoreData-ni .swift fayliga import qilishni unutmang!

* Agar siz yangi loyiha yaratsangiz va loyihaga asosiy ma'lumotlarni qo'shishni tanlasangiz, yuqoridagi qozon plitasining kodi App Delegate-da paydo bo'ladi.

Ma'lumotni saqlash bilan bir qatorda, siz keyingi safar dasturni ishga tushirganda ilovaingizni to'ldirish uchun ushbu ma'lumotni olishni xohlaysiz. Aytaylik, siz .xcdatamodel faylida "Kitob" deb nomlangan ob'ekt yaratdingiz. Quyidagi koddan ko'rinib turibdiki, siz NSFetchRequest-dan foydalanib ma'lumotlarni olasiz. Men "Kitob" deb nomlangan qatorni yaratdim, u [Book] () ga teng, ya'ni Book sub'ektlarining qatorini anglatadi. Har doim men ushbu saqlangan ma'lumotlar bilan dasturimni to'ldirishni xohlaganimda, men ushbu CoreDataModel.sharedInstance.fetchWorkoutData () funktsiyasini chaqiraman va CoreDataModel.sharedInstance.books bilan teng ishlashni xohlayman.

Ma'lumotni asosiy ma'lumotlardan olib tashlash ham juda oson - siz saqlashingiz kerak bo'lgan ma'lumotni olish va massiv orqali iteratsiya qilish va har bir ob'ektni doimiy idishdan o'chirish. Voila!

Men ushbu lavozimdagi munosabatlarga aralashmadim, lekin quyidagi blog asosiy ma'lumotlarga munosabatlar kodini yozishga kirishdi.

NSKeyedArchiver

NSKeyedArchiver to'g'ridan-to'g'ri disk bilan o'zaro aloqa qilish imkoniyatini beradi. Xususan, u ikkita usul bilan protokol bo'lgan NSCoding-ni seriyalashtiradi:

  1. kodlash (aCoder bilan: NSCoder bilan)
  2. tashabbus (aDecoder kodlovchi: NSCoder)

Quyidagi misolda, mening maqsadim [Shaxs] qatorini saqlashdir. Class kishining ikkita xususiyati bor: firstName (tip String) va lastName (tip String). Quyidagi koddan ko'rinib turibdiki, Class Person NSCoding protokolini qabul qiladi va unga mos keladi.

NSKeyedArchiver orqali ma'lumotlarni saqlash va olish juda sodda. Ma'lumotni saqlamoqchi bo'lsangiz, shunchaki NSKeyedArchiver.archiveRootObject-ga qo'ng'iroq qilishingiz mumkin - bu o'rnatilgan usul.

Xuddi shunday, siz doimiy ma'lumotni olishni xohlaganingizda, boshqa o'rnatilgan funktsiyani chaqirishingiz mumkin, NSKeyedUnarchiver.unarchiveObject.

Ko'rinib turibdiki, NSKeyedArchiver Core Data-ga qaraganda amalga oshirish osonroq va ma'lumotlarni saqlab qolish uchun jozibali variant.

Foydalanuvchi parametrlari

UserDefaults - bu har xil turdagi ma'lumotlarni oddiy saqlashga imkon beradigan sinf. U, asosan, ilovalarni ishga tushirish yoki qurilmani qayta ishga tushirish o'rtasida saqlanib qolish uchun oz miqdordagi ma'lumotlarni saqlash uchun ishlatiladi. UserDefaults asosiy turlarini (bool, float, double, int va boshqalar) va yanada murakkab turlarni (qator, lug'at) saqlashi mumkin. UserDefaults hech qanday tuzilishga ega bo'lmasa ham, u asosiy ma'lumotlarga qaraganda tezroq deyiladi, chunki bu asosiy qiymat juftlari. Tarkibga ega bo'lmaganligi sababli, strukturani talab qilmaydigan ma'lumotlarni saqlash foydalidir - shuning uchun foydalanuvchi imtiyozlari.

Shuni ta'kidlash kerakki, agar siz kalitni qayta tiklasangiz, saqlangan ma'lumotlar har ikkala kalit ham bir xil bo'lishi kerak bo'ladi - agar bitta kalitda kichik harflar bo'lsa, ikkinchi kalitda bitta katta harf bo'lsa, mavjud ma'lumotlar o'zgartirilmaydi.

O'qiganingiz va baxtli kodlashingiz uchun rahmat !!

Adabiyotlar:

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