Belajar menggunakan Core Data di Swift 5

Cara menyimpan data pada penyimpanan lokal dengan menggunakan framework Core Data milik Apple

Auriga Aristo
Dipantry
6 min readOct 11, 2020

--

Photo by benjamin lehman on Unsplash

Dalam mengembangkan sebuah perangkat lunak atau aplikasi, developer selalu dihadapkan oleh data informasi. Pada web server, kita mengenal database dengan bahasa SQL, baik memiliki relational maupun tidak. Sedangkan pada mobile, banyak orang mengenal SQLite. Namun, ada juga opsi lain seperti Shared Preferences di Android dan User Defaults di iOS.

Kali ini, saya akan memperkenalkan tempat penyimpanan atau database milik iOS, namanya Core Data. Core Data merupakan sebuah objek graf dan persistence framework milik Apple. Core Data memiliki sifat yang mirip dengan relational database yang dimana memiliki entity, attribute dan relationship. Dalam proyek MVC, Core Data akan berguna sebagai data model sehingga tidak perlu lagi kita membuat data struct sebagai model baru.

Core Data yang berjalan menggunakan sistem multi-thread environment yang artinya akan bergerak pada background task tanpa mengganggu thread utama yang biasa digunakan untuk memuat tampilan. Core Data akan menggunakan sistem background task tersebut setiap kali melakukan proses create, update, delete, dan read. Namun, dikarenakan proses dilakukan terhadap penyimpanan lokal, proses dilakukan dengan sangat cepat.

A. Setup environment — New Project

Pada contoh kali ini, saya akan menggunakan proyek baru. Ketika membuatnya, perhatikan pengaturan proyek seperti gambar di bawah. Karena kita akan menggunakan Core Data, pastikan “Use Core Data” tercentang.

Screenshot by Author

Setelah proyek berhasil dibuat, kita akan menemukan sebuah file yang agak asing, yaitu file dengan extension .xcdatamodel. File ini berfungsi untuk menyimpan semua data entity yang akan digunakan sebagai data model.

Screenshot by Author

B. Setup Environment — Existing Project

Apabila kamu ingin langsung mengimplementasikan core data pada proyek lamamu yang tidak memiliki core data sebelumnya, tidak perlu khawatir. Kalian tidak perlu membuat proyek baru untuk memasangnya. Cara memasangnya cukup mudah. Kalian hanya perlu membuat file baru dengan tipe file “data model” (lihat gambar). Setelah memberi nama, kamu akan menemukan file .xcdatamodel dalam proyekmu.

Screenshot by Author

C. Membuat entity dan attribute

Setelah memiliki file data model, mari kita membuat entity sesuai kebutuhan. Untuk membuat entity, kalian bisa klik tombol “Add Entity” di bagian bawah editor. Lalu, kalian bisa memberi nama sesuai dengan yang diinginkan.

Pada contoh kali ini, saya ingin membuat data list binatang. Maka dari itu, saya akan membuat entity dengan nama Animal.

Selanjutnya, kita akan membuat attribute. Attribute lebih dikenal dengan “nama kolom” kalau kalian sudah pernah mengenal SQL. Attribute memiliki pengaturan wajib yaitu nama dan tipe data. Lalu ada juga pengaturan untuk data default, optional, atau validation, namun hal ini tidak wajib.

Tipe data yang bisa kita gunakan ada bermacam-macam, yaitu

  • Integer 16, 32, 64 : Untuk penyimpanan bilangan bulat. Angka di belakangnya berarti jumlah bit yang digunakan untuk penyimpanan. Semakin besar bitnya, semakin besar pula tempat yang disiapkan untuk menyimpan.
  • Decimal, Double, Float : Untuk penyimpanan bilangan desimal. Double menggunakan 64 bit dan float menggunakan 32 bit. Ketika mencapai batas maksimalnya, kedua tipe ini akan membulatkan datanya. Sedangkan desimal mampu menyimpan bilangan desimal tanpa pembulatan.
  • String : Untuk penyimpanan data teks.
  • Boolean : Untuk penyimpanan data YES atau NO.
  • Date : Untuk penyimpanan tanggal atau timestamps.
  • Binary Data : Untuk penyimpanan data biner.
  • UUID : Untuk menyimpan data pada identifier atau id.
  • URI : Untuk menyimpan URL atau alamat website
  • Transformable : Bisa untuk menyimpan apapun, tergantung pada class yang dipasang kepadanya. Contoh: UIImage, UIColor, [String].

Pada contoh ini, kita akan menggunakan 3 data saja, yaitu name sebagai String, legs sebagai Integer 16, dan fly sebagai Boolean.

Screenshot by Author

Setelah entity dan attribute dibuat, selanjutnya kita akan membahas bagaimana cara membuat 4 basic function atau biasa dikenal sebagai CRUD, yang terdiri dari Create, Read, Update, Delete.

D. Setting Up Code for Core Data

Karena Core Data dapat mengubah entity sebagai data model, maka kamu tidak perlu lagi membuat struct untuk memasukkan data. Sebelum memulai kita harus melakukan import Core Data di bagian atas file. Gunakan import ini pada setiap file yang akan berhubungan dengan core data.

import CoreData

Selanjutnya, kita harus membuat variabel context, yang dimana merupakan situasi pada background task. Seperti yang telah dijelaskan sebelumnya, Core Data berjalan pada background task supaya tidak mengganggu main thread. Jadikan variabel context ini sebagai global variabel supaya kamu tidak perlu membuat variabel ini berulang kali.

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

Lalu, kita akan membuat fungsi untuk melakukan penyimpanan ke Core Data. Pembuatan method ini bersifat optional, namun karena kita akan menggunakannya berulang kali, saya akan simpan ke dalam method saja.

Tanpa menggunakan method ini, data model yang ada akan menjadi struct biasa. Data yang terkandung di dalamnya tidak akan disimpan ke dalam Core Data.

E. Create

Ketika kita ingin memasukkan data ke dalam struct, biasanya kita akan menginisialisasikannya ke dalam variabel lalu kita masukkan semua datanya. Dalam memasukkan data ke dalam Core Data, proses yang dilakukan sama saja. Perbedaannya terletak pada jumlah baris kodingannya. Di sini aku memberikan contoh data “name : Anjing, legs : 4, fly : false”

Fungsi di atas hanyalah contoh. Jika kalian ingin memasukkan banyak data, silahkan memodifikasi sendiri kodingan yang diperlukan. Jangan lupa untuk memanggil method saveData() sebelum menginisialisasi variabel baru untuk disimpan.

F. Read

Dalam mengambil data, pengembalian data selalu berupa array of object (entity). Kalau pada SQL, kamu akan mengenal

SELECT * FROM animal

Kodingan SQL di atas akan mengembalikan data list atau array. Pada Core Data, hal ini berlaku sama. Pemanggilannya bukan menggunakan SELECT namun menggunakan NSFetchRequest.

Pemanggilan dilakukan di dalam try-catch untuk mencegah terjadinya error akibat kesalahan request.

Request di sini menjadi peran penting dalam mengambil data. Apabila kita ingin mengambil data spesifik, kalian bisa menggunakan NSPredicate. Cara menggunakannya:

//untuk 1 aturan
let predicate = NSPredicate(format: "name MATCHES %@", "bebek")
request.predicate = predicate
//untuk lebih dari 1 aturan
let predicate = NSPredicate(format: "name MATCHES %@", "bebek")
let predicate2 = NSPredicate(format: "legs == 2")
request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, predicate2])

Apabila ingin menlakukan sort, kalian bisa menggunakan NSSortDescriptor. Cara menggunakannya:

//untuk 1 aturan
let sort = NSSortDescriptor(key: "name", ascending: true)
request.sortDescriptors = [sort]
//untuk lebih dari 1 aturan
let sort = NSSortDescriptor(key: "name", ascending: true)
let sort2 = NSSortDescriptor(key: "legs", ascending: false)
request.sortDescriptors = [sort, sort2]

Pemasangan aturan ini dilakukan setelah penginisialisasian variabel request dan sebelum melakukan fetch. Untuk info lebih lanjut tentang NSPredicate, klik di sini. Sedangkan, untuk NSSortDescriptor, klik di sini.

G. Update

Setelah belajar create dan read, mari kita belajar cara mengubah data yang telah disimpan. Sistem update sedikit berbeda dengan create karena menggunakan sebuah method yang bernama setValue().

animal.setValue(value, forKey: key)

animal di atas merupakan data sebuah animal yang sudah dipilih menggunakan NSPredicate. value merupakan data baru, sedangkan key merupakan nama attribute yang akan diubah.

Function getAnimal() di atas berfungsi untuk mengambil data animal dengan nama yang telah ditentukan. Kalian bisa melihat contoh penggunaan NSPredicate seperti yang sudah dijelaskan sebelumnya. Lalu fungsi update() menjelaskan bagaimana cara melakukan update.

H. Delete

Terakhir, bagaimana cara membuang data? Cara membuang data adalah yang termudah. Hanya dengan memanggil fungsi delete.

context.delete(animal)

animal di atas merupakan data sebuah animal yang sudah dipilih seperti bagian update. Cara menggunakannya:

Cukup mudah bukan?

Kesimpulan

Begitulah cara menggunakan Core Data di dalam project Swift. Dengan menggunakan framework yang disediakan oleh Apple, kita tidak perlu lagi menggunakan external library yang mampu memberatkan sebuah proyek aplikasi. Menurutku, Core Data ini sudah cukup powerful untuk dijadikan sebagai data model dan database dalam penyimpanan lokal.

Sebagai pengingat saja, jangan lupa untuk memanggil function saveData() untuk melakukan perubahan dalam Core Data. Sering-seringlah membuka Apple Documentation.

Selamat mencoba dan semoga berhasil… Semangat…

--

--

Auriga Aristo
Dipantry

4+ years in Backend Developer | PHP, Java/Kotlin, MySQL, Golang | New story every week