Core Data — apa itu, model data dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-05-04 Waktu membaca: 8 mnt

Core Data adalah framework manajemen data dari Apple yang menyediakan pemetaan objek-relasional untuk iOS, macOS, tvOS dan watchOS. Framework ini mengotomatiskan penyimpanan, pengambilan dan penyaringan objek dalam aplikasi, bekerja di atas SQLite, XML atau penyimpanan biner. Menurut Apple Core Data Documentation, framework ini menggunakan konsep Managed Object Context dan NSPersistentContainer untuk mengelola stack persistensi.

Poin Utama

  • Core Data — framework Apple untuk manajemen data objek-relasional dalam aplikasi.
  • NSManagedObjectModel — deskripsi skema data: Entity, Attributes dan Relationships.
  • NSManagedObject — objek yang sesuai dengan satu catatan di penyimpanan Core Data.
  • NSManagedObjectContext — ruang kerja untuk membuat, membaca dan menyimpan objek.
  • NSPersistentContainer — stack terpadu yang menggabungkan model, konteks dan koordinator penyimpanan.

Apa itu Core Data dan perannya di iOS

Core Data — adalah framework manajemen graf objek dan persistensi yang merupakan bagian dari Cocoa Touch. Bertentangan dengan kesalahpahaman yang umum, Core Data bukanlah basis data, melainkan lapisan manajemen objek yang dapat menggunakan SQLite sebagai salah satu penyimpanannya. Tugas utama Core Data adalah melacak perubahan objek, mengelola siklus hidupnya dan menyinkronkan status dengan disk.

Framework ini menyediakan graf objek, di mana setiap Managed Object dilacak oleh konteks untuk perubahan. Saat konteks disimpan, semua objek yang dimodifikasi, ditambahkan dan dihapus dikonfirmasi dalam penyimpanan permanen dalam satu transaksi. Ini membebaskan pengembang dari menulis query SQL dan mengelola transaksi secara manual.

Menurut statistik Swift Developer Survey (2025), Core Data digunakan di 52% aplikasi iOS yang bekerja dengan data lokal. Meskipun munculnya alternatif modern (SwiftData, Realm), Core Data tetap menjadi framework utama di proyek Apple yang ada berkat kedewasaan dan integrasi mendalam dengan sistem.

Gunakan Core Data untuk proyek dengan model data kompleksitas sedang yang membutuhkan relasi antar objek, pembatalan perubahan dan caching otomatis melalui mekanisme faulting.

Arsitektur Core Data dibangun di sekitar konsep Managed Object Context — ruang kerja yang melacak semua perubahan objek. Konteks mendukung pembatalan (undo/redo) melalui NSUndoManager bawaan, yang memungkinkan implementasi draf dan pembatalan tindakan tanpa menyimpan snapshot status secara manual. Saat save() dipanggil, konteks mengonfirmasi semua perubahan dalam satu transaksi di penyimpanan permanen, menjamin atomisitas dan konsistensi data.

Model data: Entity, Attributes, Relationships

Model data Core Data didefinisikan dalam file .xcdatamodeld — editor visual Xcode, di mana semua Entity, atribut dan relasinya dijelaskan. Saat kompilasi, model diserialisasi ke .momd dan dimuat melalui NSManagedObjectModel.

Entity dan Attributes

Entity — adalah deskripsi tipe data, mirip dengan tabel di SQL. Setiap Entity berisi kumpulan Attributes — field bernama dengan tipe data (String, Integer, Date, Boolean, Data). Tidak seperti Room, Core Data memerlukan pemilihan tipe secara eksplisit untuk setiap atribut melalui editor model.

Relationships

Relationship — relasi antar Entity, mirip dengan kunci asing di SQL. Core Data mendukung semua jenis relasi: satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak. Untuk setiap relasi dikonfigurasi Delete Rule (Cascade, Nullify, Deny) — perilaku saat menghapus objek terkait.

Delete RulePerilaku saat penghapusanContoh penerapan
CascadeMenghapus semua objek terkaitPenghapusan pesanan beserta itemnya
NullifyMenghilangkan relasi balikPenghapusan penulis tanpa menghapus buku
DenyMemblokir penghapusan jika ada objek terkaitPerlindungan dari penghapusan kategori dengan produk

Pemilihan Delete Rule sangat penting untuk integritas data: Cascade tanpa pemeriksaan dapat menghapus sepertiga basis data, dan Deny dapat memblokir operasi dengan kesalahan yang tidak dapat dipahami. Dalam kode produksi, Nullify dengan pemrosesan manual catatan yatim direkomendasikan.

Di editor model Xcode, pengembang dapat mengatur tidak hanya Entity dan atribut, tetapi juga constraints (batasan keunikan), indeks untuk mempercepat query dan default values untuk atribut. Semua perubahan model dikompilasi ke file .momd, yang dimuat saat inisialisasi NSPersistentContainer. Pembuatan versi model (Model Versioning) memungkinkan pemeliharaan beberapa versi skema dan melakukan migrasi di antaranya.

Stack Core Data: PersistentContainer dan Context

NSPersistentContainer — objek terpadu yang mengelola stack Core Data sejak iOS 10 dan macOS 10.12. Objek ini mengenkapsulasi NSManagedObjectModel, NSPersistentStoreCoordinator dan NSManagedObjectContext, mengotomatiskan pemuatan model dan konfigurasi penyimpanan. Untuk versi yang lebih lama, stack dibangun secara manual, tetapi sekarang ini tidak direkomendasikan.

swift
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores { _, error in
    if let error { fatalError("Core Data load failed: \(error)") }
}
let context = container.viewContext

viewContext — konteks utama yang terikat ke thread utama. Semua pembacaan dan pembaruan UI dilakukan melaluinya. Penulisan data untuk kinerja disarankan dilakukan di konteks anak dengan antrian pribadi dan sinkronisasi berikutnya.

NSPersistentStoreCoordinator

Koordinator NSPersistentStoreCoordinator menghubungkan model dengan penyimpanan fisik di disk. Core Data mendukung beberapa jenis penyimpanan: SQLite (direkomendasikan), Binary dan In-Memory. Penyimpanan SQLite mendukung migrasi, pencadangan tambahan dan ketahanan terhadap kegagalan selama proses penulisan.

NSFetchRequest dan bekerja dengan data

NSFetchRequest — objek yang mendeskripsikan query ke penyimpanan Core Data. Berisi nama Entity, predikat penyaringan, pengurutan dan pengaturan pengambilan. Query dieksekusi melalui context.fetch(), yang mengembalikan array NSManagedObject.

swift
let request = NSFetchRequest<User>(entityName: "User")
request.predicate = NSPredicate(format: "age >= %d", 18)
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
request.fetchLimit = 50

let results = try context.fetch(request)

NSPredicate mendukung kondisi kompleks: LIKE, IN, BETWEEN, CONTAINS[c] (tidak peka huruf besar/kecil), SUBQUERY untuk query bersarang pada Entity terkait. Core Data juga mendukung NSFetchedResultsController — kelas untuk pemuatan data reaktif di UITableView, yang secara otomatis melacak perubahan dan memperbarui tabel dengan bagian yang dianimasikan.

Core Data di lingkungan multi-thread

Bekerja dengan Core Data di aplikasi multi-thread memerlukan kepatuhan ketat terhadap aturan: NSManagedObject tidak dapat diteruskan langsung antar thread. Setiap thread (atau antrian) harus menggunakan konteksnya sendiri. Pendekatan utama — membuat NSManagedObjectContext anak dengan antrian pribadi (NSPrivateQueueConcurrencyType) untuk menulis dan viewContext untuk membaca.

Konteks anak disimpan ke induk, kemudian induk — ke penyimpanan di disk. Ini menjamin bahwa perubahan tidak memblokir thread utama dan UI selalu melihat status yang konsisten melalui mergeChanges atau pembaruan otomatis viewContext saat penyimpanan.

Core Data menggunakan faulting — mekanisme pemuatan tertunda objek terkait. Saat mengambil User tanpa meminta addresses-nya, Address terkait tidak dimuat sampai diakses melalui notasi titik. Faulting menghemat memori dan mempercepat pemuatan, tetapi dapat menyebabkan akses disk tak terduga di thread utama jika akses tidak dikontrol di konteks latar belakang.

Untuk multi-threading yang efisien, gunakan NSBatchInsertRequest dan NSBatchDeleteRequest untuk penyisipan dan penghapusan massal tanpa memuat objek ke memori — ini penting untuk sinkronisasi data dengan server.

Operasi batch dieksekusi langsung di tingkat NSPersistentStoreCoordinator, melewati konteks dan graf objek. Ini memungkinkan penyisipan 10.000 catatan dalam beberapa milidetik tanpa membuat 10.000 instance NSManagedObject di memori. Setelah eksekusi query batch, konteks harus diperbarui melalui mergeChangesFromContextDidSaveNotification agar UI mencerminkan data baru. Apple merekomendasikan operasi batch untuk pemuatan data awal dan sinkronisasi malam dengan server.

Untuk melacak perubahan di Core Data, digunakan NSPersistentHistoryTracking — mekanisme yang mencatat setiap transaksi (penyisipan, pembaruan, penghapusan) dalam riwayat terpisah. Mengaktifkan history tracking memungkinkan sinkronisasi data antara berbagai proses dan aplikasi yang bekerja dengan file SQLite yang sama, misalnya antara aplikasi utama dan Notification Service Extension. Aktivasi dilakukan melalui NSPersistentStoreDescription dengan flag persistentHistoryTrackingKey, dan pembacaan melalui NSPersistentHistoryChangeRequest dengan filter berdasarkan tanggal dan jenis transaksi.

Untuk debugging dan profiling kinerja Core Data, gunakan alat Core Data Profiler dari suite Instruments di Xcode pada macOS. Alat ini menampilkan semua operasi pengambilan, penyisipan, penghapusan dan penyimpanan dengan durasi setiap operasi dan jumlah objek yang dimuat dalam tabel dan grafik garis waktu. Pengembang dapat mengidentifikasi area bermasalah: beberapa pengambilan query yang sama (kurangnya caching), kebocoran objek fault saat menggulir tabel atau pemblokiran thread utama karena pemuatan sinkron entitas terkait. Profiling disarankan dilakukan pada perangkat nyata, bukan pada simulator, karena kinerja simulator tidak mencerminkan perilaku nyata aplikasi di iPhone atau iPad.

Pertanyaan yang Sering Diajukan

Apa perbedaan Core Data dengan SQLite?

Core Data — bukan basis data, melainkan lapisan manajemen objek yang dapat menggunakan SQLite sebagai penyimpanan. Tidak seperti SQLite langsung, Core Data melacak perubahan objek, mengelola pembatalan dan menyediakan graf objek dengan faulting dan caching. SQLite memberikan lebih banyak kontrol atas query, tetapi memerlukan penulisan SQL dan pengelolaan transaksi secara manual.

Bagaimana cara melakukan migrasi skema Core Data?

Core Data mendukung migrasi ringan (Lightweight Migration) untuk perubahan non-destruktif: penambahan atribut, penggantian nama, pengaturan nilai default. Untuk perubahan kompleks, Mapping Model dibuat. Migrasi ringan diaktifkan dengan flag shouldMigrateAutomatically di NSPersistentStoreDescription.

Bisakah Core Data digunakan dengan SwiftUI?

Ya, Core Data terintegrasi dengan SwiftUI melalui wrapper @FetchRequest untuk query dan @ObservedObject untuk berlangganan perubahan. SwiftUI secara otomatis memperbarui View saat ManagedObject berubah, membuat Core Data dan SwiftUI menjadi stack yang kompatibel untuk manajemen status.

Apa itu fault di Core Data?

Fault — adalah placeholder ringan di graf Core Data yang tidak berisi data objek terkait. Saat fault diatur (melalui refreshObject:) data dibongkar dari memori. Saat mengakses properti, fault secara otomatis diisi dengan data dari penyimpanan — ini adalah mekanisme pemuatan tertunda yang mengoptimalkan penggunaan memori.

Bagaimana cara menguji kode Core Data?

Untuk pengujian, gunakan jenis penyimpanan In-Memory: NSPersistentStoreDescription dengan NSInMemoryStoreType. Kontainer dibuat dengan model dari bundel pengujian. Setelah setiap pengujian, hapus semua objek atau buat ulang kontainer — ini menjamin isolasi kasus pengujian satu sama lain.

Ringkasan

  • Core Data — framework manajemen graf objek yang menggunakan SQLite sebagai penyimpanan default.
  • NSManagedObjectModel menjelaskan skema: Entity, Attributes, Relationships dan Delete Rules.
  • NSPersistentContainer menggabungkan model, koordinator dan viewContext dalam satu stack.
  • NSFetchRequest dengan NSPredicate dan NSSortDescriptor membentuk query fleksibel ke penyimpanan.
  • Multi-threading memerlukan konteks terpisah: konteks anak untuk menulis dan viewContext untuk membaca.
  • Faulting menunda pemuatan objek terkait hingga akses pertama, menghemat memori.
  • Lightweight Migration secara otomatis menangani perubahan skema non-destruktif tanpa kehilangan data.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga