Dimulai dengan Data Inti! Sulit dengan kata-kata sederhana

Banyak topik telah ditulis dengan Core Data, tetapi sebagian besar artikel ini dalam bahasa Inggris, serta menggunakan banyak kata "pintar" yang dapat membingungkan pemula.

Dalam artikel ini saya akan mencoba untuk berbicara tentang kerangka kerja ini dari Apple dalam bahasa yang dapat dimengerti sehingga bahkan programmer "terkecil" dapat memperoleh informasi untuk diri mereka sendiri dan mendapatkan jumlah minimum pengetahuan yang akan membantu mereka dalam proyek mereka juga.

Offtopic kecil


Data Inti adalah alat yang sangat kuat yang memungkinkan Anda menyimpan data dalam aplikasi Anda dan menggunakannya nanti. Pada artikel ini, saya TIDAK akan berbicara tentang bekerja dengan banyak konteks dengan sinkronisasi berikutnya, bagaimana menyelesaikan masalah migrasi dan berbagai fitur lanjutan.

Target pembaca artikel ini adalah orang-orang yang umumnya tidak memiliki pengalaman dengan Data Inti.

Baiklah ... Mari kita mulai!


Untuk memulai, Anda perlu membuat file .xcdatamodeld itu sendiri, setelah Anda membukanya, di bagian bawah layar Anda akan melihat tombol β€œAdd entity”. Dengan mengkliknya, model objek Anda akan dibuat:



Dan sekarang, dengan lebih detail:

  1. Entitas Anda. Anda dapat menganggap Entity sebagai struktur data Anda, yang memiliki warisan dari kelas tertentu - NSManagedObject, dan juga akan memiliki bidang tertentu untuk menulis data, lebih lanjut tentang itu nanti.
  2. Attributes. Entity . + . :
    • Integer 16/32/64 β€” . , . Int, .
      : Integer16(15)
    • Decimal/Double/Float β€” . , .
    • String β€” .
    • Boolean β€” .
    • Date β€” Date.
      NOTE: Core Data 00:00:00 UTC 1 1970 .
    • Binary Data β€” Data
      NOTE: Allow External Storage. Core Data , 100 , Core Data . .
    • UUID β€” UUID.
    • URI β€” URL
    • Transformable β€” , NSCoding.

  3. Relationship. Entity. Relationships :

    1. One-to-One
    2. One-to-Many
    3. Many-to-Many

    Relationships.

    3 Entities, Andrey, Home, Car.

    • β€” One-to-One Relationship.
    • 1, 2 β€” One-to-Many Relationship.
    • Many-to-Many Relationship . .
  4. Entity
  5. Bidang Codegen. Singkatnya, bidang ini menunjukkan siapa yang akan mengatur pembuatan kelas NSManagedObject. Untuk kemudahan operasi, pilih Manual / Tidak Ada , maka Core Data akan dapat membuat kelas yang diperlukan untuk Entitas Anda sendiri. Tentang itu di bawah ini.

Untuk membuat kelas Entitas kami, gunakan:

Editor> Buat NSManagedObject Subclass.



Jika Anda ingin menetapkan nilai default untuk atribut Anda, gunakan metode ini:

public override func awakeFromInsert() {
        super.awakeFromInsert()
        date = Date()
}

Bekerja dengan NSManagedObjectContext dan PersistentStoreCoordinator


Hierarki Stack Data Inti:



Secara sederhana, semua Entitas Anda ditampilkan sebagai Objek yang Dikelola dalam diagram di atas. Semua Objek Terkelola kami disimpan di NSManagedObjectContext. Konteks Ini merujuk ke NSPersistentStoreCoordinator yang menyimpan data tersimpan Anda sebagai Cache Baris setelah mengakses SQL, tetapi ini tidak terjadi sekarang.

Untuk membuat turunan dari ManagedObject (Entity) Anda, Anda harus merujuk ke NSPersistentContainer Anda yang merupakan pembungkus untuk NSPersistentStoreCoordinator Anda.

var persistentContainer: NSPersistentContainer = {
      let container = NSPersistentContainer(name: "SavingLearn")
      container.loadPersistentStores(completionHandler: { (storeDescription, error) in
          if let error = error as NSError? {
              fatalError("Unresolved error \(error), \(error.userInfo)")
          }
      })
      return container
  }()

Selanjutnya, kita perlu mengakses NSManagedObjectContext melalui PersistentContainer kami:

var context: NSManagedObjectContext = {
    return persistentContainer.viewContext
  }()

Sekarang kita dapat membuat instance dari ManageObject kita dari konteks kita dan memberikan nilai:

var person = Person(context: context)
person.age = 32

Menyimpan Objek


Untuk menyimpan, kami menggunakan fungsi sederhana:

func saveContext () {
      if context.hasChanges {
          do {
              try context.save()
          } catch {
            context.rollback()
              let nserror = error as NSError
              fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
          }
      }
  }

Dalam metode di atas, kami memeriksa konteks kami untuk perubahan dan jika ada, kami melakukan penghematan. Jika terjadi kesalahan, metode ini dijalankan:

context.rollback()

rollback()
Metode mengembalikan konteks kita ke keadaan semula dan membatalkan semua perubahan yang dibuat di sana.

Hapus objek

context.delete(object)

Memungkinkan kita menghapus objek dari Core Data dengan mudah.
CATATAN: Agar perubahan berlaku, Anda perlu menyimpan konteksnya, jika tidak semua perubahan tidak akan disimpan.
context.save()

Mengambil Semua Objek


Untuk mendapatkan array objek kami dari Core Data, kami harus melakukan NSFetchRequest. Saya tidak akan masuk jauh ke dalam kekuatan penuh FetchRequest karena artikel ini dirancang untuk pemula.

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
let objects = try context.fetch(fetchRequest)

Di bawah tenda, NSFetchRequest melakukan pekerjaan dengan baik:

  1. NSFetchRequest Pergi ke Koordinator Toko Persisten
  2. Koordinator Toko Persisten mengirimkan permintaan ke Toko Persistent
  3. Persistent Store SQL
  4. SQL . ID Row Value. Row Value Persistent Store Row Cache ID.
  5. Persistent Store Managed Objects ID Persistent Store Coordinator. fault () . Managed Object Context ID, Core Data SQL.
  6. Persistent Store Coordinator context Managed Object
  7. Core Data .
    includePendingChanges = false
  8. NSManagedObject

CATATAN: Saat Konteks Objek yang Dikelola NSFetchRequest berjalan dan Koordinator Toko Persisten berjalan dalam antrian sinkron, semua proses diblokir saat proses lain sedang berjalan.

Kesimpulan


Dalam artikel ini, saya menggambarkan informasi minimum yang diperlukan untuk bekerja dengan Data Inti menurut pendapat saya.

Sekarang Anda dapat membuat model data Anda sendiri, menyimpan, menghapus dan mengambilnya.

Jika Anda tertarik pada topik yang lebih "maju" tentang bekerja dengan Data Inti dan kiat-kiat menarik, maka tulislah di komentar dan saya akan mencari tahu apa yang dapat dilakukan tentang hal itu. Selamat coding!

All Articles