Data Inti vs. NSKeyedArchiver vs. Default Pengguna

Data inti, NSKeyedArchiver, dan UserDefaults adalah tiga cara di mana seorang programmer dapat menyimpan data di antara peluncuran aplikasi. Meskipun data inti sedikit lebih rumit, ini berguna ketika informasi yang disimpan membutuhkan struktur. NSKeyedArchiver kurang kompleks dan lebih lambat dari data inti, tetapi jauh lebih mudah digunakan. UserDefaults adalah metode paling sederhana untuk mempertahankan data.

Data Inti

Manfaat utama untuk data inti meliputi:

  1. kemampuan untuk melakukan query secara efisien
  2. data disusun sedemikian rupa sehingga setiap entitas memiliki atribut tertentu (berpikir properti dengan tipe tertentu) dan mungkin atau mungkin tidak berhubungan dengan entitas lain melalui hubungan
  3. migrasi otomatis - pada dasarnya ini hanya berarti ketika Anda membuat model data inti, database SQLite dibuat. Jika Anda selanjutnya mengubah model data (mis. Menambahkan lebih banyak atribut ke model data), model data baru tidak kompatibel dengan penyimpanan persisten asli. Apple menangani "migrasi" ini dari satu versi model data ke versi lain untuk kami - terima kasih Apple !!

Sebelum menggali ke dalam kode, pertama mari kita melihat beberapa definisi:

  1. NSPersistentContainer bertanggung jawab untuk membaca / menulis data inti.
  2. viewContext tipe NSManagedObjectContext. Anda membuat turunan dari objek data inti melalui NSManagedObjectContext.

Untuk mengintegrasikan data inti ke proyek Anda, Anda harus terlebih dahulu membuat file data inti .xcdatamodel. Di dalam file ini Anda akan menentukan entitas, termasuk atribut setiap entitas, yang ingin Anda pertahankan. Setelah membuat file .xcdatamodel, kemudian tambahkan file .swift baru ke proyek yang akan menggabungkan semua kode pelat ketel untuk data kode. Tiga hal yang perlu diperhatikan dalam kode di bawah ini -

  1. nama NSPeristentContainer HARUS sama dengan file .xcdatamodel.
  2. Saya membuat singleton sehingga sepanjang keseluruhan aplikasi hanya ada satu kali informasi yang disimpan melalui data inti. Jika Anda ingin tahu tentang pola desain / lajang secara umum, lihat blog ini.
  3. Jangan lupa untuk mengimpor CoreData ke file .swift!

* Jika Anda membuat proyek baru dan memilih untuk menambahkan data inti ke proyek, kode pelat ketel di atas akan muncul di App Delegate.

Selain menyimpan data, kemungkinan Anda juga akan ingin mengambil data itu untuk mengisi aplikasi Anda saat berikutnya aplikasi diluncurkan. Katakanlah Anda membuat entitas dalam file .xcdatamodel yang disebut "Book." Seperti yang Anda lihat dalam kode di bawah ini, Anda mengambil data menggunakan NSFetchRequest. Saya membuat sebuah array, yang disebut "Buku," yang sama dengan [Book] (), yang berarti sebuah array dari entitas Book. Setiap kali saya ingin mengisi aplikasi saya dengan data yang disimpan ini, saya memanggil CoreDataModel.sharedInstance.fetchWorkoutData () func ini dan mengatur data yang ingin saya gunakan dengan CoreDataModel.shareInstance.books.

Menghapus informasi dari data inti juga sangat sederhana - yang perlu Anda lakukan adalah mengambil informasi yang disimpan dan beralih melalui array dan menghapus setiap objek dari wadah persisten. Voila!

Saya belum menyelidiki hubungan dalam posting ini, tetapi blog berikut menyelam ke dalam penulisan kode untuk hubungan dalam data inti.

NSKeyedArchiver

NSKeyedArchiver menyediakan kemampuan untuk berinteraksi langsung dengan disk. Secara khusus, ini membuat serial NSCoding, yang merupakan protokol dengan dua metode:

  1. encode (dengan aCoder: NSCoder)
  2. init? (coder aDecoder: NSCoder)

Dalam contoh di bawah ini, tujuan saya adalah untuk tetap menggunakan array [Person]. Class Person memiliki dua properti: firstName (tipe String) dan lastName (tipe String). Seperti yang Anda lihat dari kode di bawah ini, Person kelas mengadopsi dan mematuhi protokol NSCoding.

Penyimpanan dan pengambilan data melalui NSKeyedArchiver sangat mudah. Ketika Anda ingin menyimpan informasi, Anda bisa memanggil NSKeyedArchiver.archiveRootObject - ini adalah metode bawaan.

Demikian pula, ketika Anda ingin mengambil data yang ada, Anda dapat memanggil fungsi bawaan lainnya, NSKeyedUnarchiver.unarchiveObject.

Seperti yang Anda lihat, NSKeyedArchiver jauh lebih sederhana untuk diimplementasikan daripada Core Data dan merupakan opsi yang menarik untuk mempertahankan data.

Default Pengguna

UserDefaults adalah kelas yang memungkinkan penyimpanan sederhana berbagai tipe data. Ini terutama digunakan untuk menyimpan sejumlah kecil data untuk bertahan di antara peluncuran aplikasi atau restart perangkat. UserDefaults dapat menyimpan tipe dasar (bool, float, double, int, dll) dan tipe yang lebih kompleks (array, kamus). Meskipun UserDefaults tidak memiliki struktur, itu dikatakan lebih cepat dari data inti karena semua itu adalah pasangan nilai kunci. Karena tidak memiliki struktur, maka berguna untuk menyimpan data yang tidak memerlukan struktur - karenanya, preferensi pengguna.

Satu hal yang perlu diperhatikan adalah jika Anda mereset kunci, data yang disimpan akan diganti NAMUN kedua tombol HARUS SAMA - jika satu kunci memiliki semua huruf kecil dan kunci kedua memiliki satu huruf besar, data yang ada tidak akan diganti.

Terima kasih telah membaca dan senang menulis kode !!

Referensi:

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