Cyber Monday Sale 40% off unlimited courses & creative assets! 40% off unlimited assets! Save Now
Advertisement
  1. Code
  2. Mobile Development

Inti Data dari awal: Core tumpukan Data

by
Read Time:15 minsLanguages:
This post is part of a series called Core Data from Scratch.
Core Data from Scratch: Data Model

Indonesian (Bahasa Indonesia) translation by Ibnukholil (you can also view the original English article)

Introduksi

Kerangka Inti Data telah ada selama bertahun-tahun. Ini digunakan dalam ribuan aplikasi dan oleh jutaan orang, baik di iOS dan OS X. Core Data dikelola oleh Apple dan didokumentasikan dengan sangat baik. Ini adalah kerangka kerja matang yang telah membuktikan nilainya berulang-ulang.

Data Inti mengambil keuntungan dari bahasa Objective-C dan runtime, dan terintegrasi dengan rapi dengan kerangka Core Foundation. Hasilnya adalah kerangka kerja yang mudah digunakan untuk mengelola grafik objek yang elegan untuk digunakan dan sangat efisien dalam hal penggunaan memori.

1. Prasyarat

Meskipun kerangka Core Data tidak begitu sulit, jika Anda baru di iOS atau pengembangan OS X, maka saya sarankan Anda terlebih dahulu melalui seri kami tentang pengembangan iOS. Ini mengajarkan Anda dasar-dasar pengembangan iOS dan, pada akhir seri, Anda akan memiliki cukup pengetahuan untuk mengambil topik yang lebih kompleks, seperti Data Inti.

Seperti yang saya katakan, Data Inti tidak serumit atau sulit untuk diambil karena sebagian besar pengembang berpikir. Namun, saya telah belajar bahwa fondasi yang kuat sangat penting untuk mendapatkan kecepatan dengan Core Data. Anda harus memiliki pemahaman yang tepat tentang API Data Inti untuk menghindari praktik buruk dan pastikan Anda tidak mengalami masalah menggunakan kerangka kerja.

Setiap komponen kerangka Data Inti memiliki tujuan dan fungsi tertentu. Jika Anda mencoba menggunakan Data Inti dengan cara yang tidak dirancang untuknya, Anda pasti akan berakhir dengan berjuang dengan kerangka.

Apa yang saya bahas dalam seri ini pada Core Data berlaku untuk iOS 6 dan OS X 10.8, tetapi fokusnya adalah pada iOS. Dalam seri ini, saya akan bekerja dengan Xcode 5 dan iOS 7 SDK.

2. Belajar Kurva 

Framework Inti Data dapat tampak menakutkan pada awalnya, tetapi API intuitif dan ringkas setelah Anda memahami bagaimana berbagai potongan puzzle cocok bersama. Dan itulah di mana sebagian besar pengembang mengalami masalah. Mereka mencoba menggunakan Data Inti sebelum mereka melihat proverbial puzzle itu, mereka tidak tahu bagaimana potongan-potongan puzzle cocok dan terhubung satu sama lain.

Dalam artikel ini, saya akan membantu Anda menjadi akrab dengan apa yang disebut Core Data stack. Setelah Anda memahami kunci pemain dari tumpukan Data Inti, framework akan terasa kurang menakutkan dan Anda bahkan akan mulai menikmati dan menghargai kerangka API yang dibuat dengan baik.

Berbeda dengan kerangka kerja seperti UIKit, yang dapat Anda gunakan tanpa memahami kerangka kerja secara keseluruhan, Core Data menuntut pemahaman yang tepat tentang blok pembangunnya. Sangat penting untuk menyisihkan waktu untuk menjadi akrab dengan kerangka kerja, yang akan kami lakukan dalam tutorial ini.

3. Apa itu Core Data?

Developer yang baru dalam framework Core Data sering mengacaukannya dan mengharapkannya berfungsi sebagai database. Jika ada satu hal saya harap Anda ingat dari seri ini, itu adalah bahwa Core Data bukan database dan Anda seharusnya tidak berharap untuk bertindak seperti itu.

Apa itu Core Data jika bukan database? Core Data adalah lapisan model aplikasi Anda dalam arti seluas mungkin. Ini Model dalam pola Model-View-Controller menembus iOS SDK.

Core Data bukanlah database dari aplikasi Anda, juga bukan API untuk meneruskan data ke database. Core Data adalah framework yang mengelola grafik objek. Sesederhana itu. Core Data dapat bertahan bahwa objek grafik dengan menulisnya ke disk, tetapi itu bukan tujuan utama dari framework.

4. Tumpukan Core Data

Seperti yang saya sebutkan sebelumnya, tumpukan Core Data adalah inti dari Core Data. Ini adalah kumpulan objek yang membuat Core Data dicentang. Objek utama dari stack adalah model objek yang dikelolapersistent store coordinator, dan satu atau lebih konteks objek yang dikelola. Mari kita mulai dengan melihat sekilas setiap komponen.

NSManagedObjectModel

Model objek yang dikelola adalah model data aplikasi. Meskipun Core Data bukan database, Anda dapat membandingkan model objek yang dikelola dengan skema database, yang berisi informasi tentang model atau entitas grafik objek, atribut apa yang mereka miliki, dan bagaimana mereka berhubungan dengan satu sama lain.

Objek NSManagedObjectModel tahu tentang model data dengan memuat satu atau lebih file model data selama inisialisasi. Kami akan melihat cara kerjanya dalam beberapa saat.

NSPersistentStoreCoordinator

Seperti namanya menunjukkan, objek NSPersistentStoreCoordinator mempertahankan data ke disk dan memastikan penyimpanan persisten (s) dan model data yang kompatibel. Ini memediasi antara persistent store(s) dan managed object context(s) dan juga mengurus pemuatan dan caching data. Itu Benar. Core Data memiliki cache yang tertanam di dalamnya.

Koordinator persistent store adalah konduktor Core Data orchestra. Terlepas dari peran pentingnya dalam tumpukan Core Data, kami jarang berinteraksi dengannya secara langsung.

NSManagedObjectContext

Objek NSManagedObjectContext mengelola koleksi dari objek model, contoh class NSManagedObject. Sangat mungkin untuk memiliki beberapa konteks objek yang dikelola. Setiap konteks objek yang dikelola didukung oleh koordinator persistent store .

Anda dapat melihat konteks objek yang dikelola sebagai meja kerja tempat Anda bekerja dengan objek model Anda. Anda memuatnya, Anda memanipulasinya, dan menyimpannya di meja kerja itu. Pemuatan dan penyimpanan dimediasi oleh koordinator persistent store . Anda dapat memiliki beberapa meja kerja, yang berguna jika aplikasi Anda multithread, misalnya.

Meskipun model objek yang dikelola dan koordinator persistent store dapat dibagikan di seluruh untaian, konteks objek terkelola tidak boleh diakses dari utas yang berbeda dari yang dibuat. Kita akan membahas multithreading secara lebih rinci nanti dalam seri ini.

5. Menjelajahi Stack Core Data

Langkah 1: Template Xcode

Mari kita telusuri tumpukan Core Data secara lebih terperinci dengan melihat pada template Xcode Apple untuk Core Data. Buat proyek baru di Xcode 5 dengan memilih New > Project... dari menu File. Pilih template Aplikasi Kosong dari daftar templat Aplikasi iOS di sebelah kiri.

Beri nama Proyek Core Data, atur Perangkat ke iPhone, dan centang kotak centang berlabel Use Core Data. Beri tahu Xcode tempat Anda ingin menyimpan file proyek dan tekan Buat.

Langkah 2: Overview

Secara default, Apple menempatkan kode yang terkait dengan Core Data di kelas delegasi aplikasi, class TSPAppDelegate dalam contoh kami. Mari kita mulai dengan menjelajahi antarmuka TSPAppDelegate.

Seperti yang Anda lihat, delegasi aplikasi memiliki properti untuk setiap komponen tumpukan Core Data serta dua metode kenyamanan, saveContext dan applicationDocumentsDirectory.

Perhatikan bahwa properti Core Data ditandai sebagai readonly, yang berarti bahwa instance tidak dapat dimodifikasi oleh objek selain dari aplikasi delegasi itu sendiri.

Implementasi TSPAppDelegate jauh lebih menarik dan akan menunjukkan kepada kita bagaimana model objek yang dikelola, koordinator persistent store, dan konteks objek yang dikelola bekerja bersama. Mari mulai dari atas.

Karena properti di interface dari class TSPAppDelegate dinyatakan sebagai readonly, tidak ada method penyetel yang dibuat. Pertama @synthesize memberitahu secara direktif menyusun untuk mengaitkan variabel instan _managedObjectContext dengan properti managedObjectContext yang kami nyatakan dalam interface dari classnya. Ini adalah pola umum untuk memuat objek secara malas.

Anda dapat mencapai hasil yang sama dengan menggunakan ekstensi class private di file implementasi class. Lihatlah potongan kode berikut. Arah @synthesize tidak diperlukan jika Anda menggunakan ekstensi class private.

Meskipun saya biasanya menggunakan dan lebih suka ekstensi class private, kami akan tetap menggunakan template Apple untuk tutorial ini.

Menyiapkan stack Core Data sebenarnya cukup mudah dalam hal metode yang perlu diterapkan. Apple tidak menggunakan metode pengaturan khusus untuk membuat Stack Core Data. Tiga objek kunci dari stack Core Data dibuat ketika dibutuhkan. Dengan kata lain, mereka malas dimuat atau dipakai.

Dalam prakteknya ini berarti bahwa, implementasi class TSPAppDelegate terlihat mirip dengan apa yang Anda harapkan dalam class delegasi aplikasi dengan pengecualian method saveContext dan applicationDocumentsDirectory, dan method pengambil dari managedObjectContext, managedObjectModel, dan persistentStoreCoordinator. Ada dalam method pengambil ini bahwa keajaiban terjadi. Itulah salah satu keindahan dari Core Data, pengaturannya sangat sederhana dan berinteraksi dengan Core Data juga mudah.

Langkah 3: Konteks Objek yang Dikelola

Class yang paling sering Anda gunakan, selain dari NSManagedObject, ketika berinteraksi dengan Core Data adalah NSManagedObjectContext. Mari kita mulai dengan mengeksplorasi getternya.

Tiga baris pertama dari penerapannya adalah khas untuk getter yang dengan malas memuat variabel instan. Jika objek NSManagedObjectContext tidak nil, ia mengembalikan objek. Yang menarik adalah instantiasi sebenarnya dari objek NSManagedObjectContext.

Kami pertama mengambil referensi ke koordinator persistence store dengan memanggil method pengambilnya. Koordinator persistent store juga malas dimuat seperti yang akan kita lihat nanti. Jika koordinator persistent store tidak nil, kami membuat instance NSManagedObjectContext dan menyetel properti persistentStoreCoordinator nya ke koordinator persistent store. Itu tidak terlalu sulit. Apakah itu?

Singkatnya, Pengelola konteks objek yang mengelola kumpulan objek model, contoh class NSManagedObject, dan menyimpan referensi ke koordinator persistent store. Ingatlah hal ini sambil membaca sisa artikel ini.

Langkah 4: Persistent Store Coordinator

Seperti yang kita lihat beberapa saat yang lalu, method persistentStoreCoordinator dipanggil oleh method managedObjectContext. Lihatlah penerapan persistentStoreCoordinator, tetapi jangan biarkan hal itu membuat Anda takut. Sebenarnya tidak terlalu rumit.

Anda hampir selalu ingin menyimpan grafik objek Core Data ke disk dan Xcode template Apple menggunakan database SQLite untuk mencapai hal ini.

Ketika kami membuat koordinator persistent store di persistentStoreCoordinator, kami menentukan lokasi store di disk. Kami mulai dengan membuat objek NSURL yang mengarah ke lokasi tersebut di aplikasi sandbox. Kami memanggil applicationDocumentsDirectory, method helper, yang mengembalikan lokasi, objek NSURL, dari direktori Dokumen di aplikasi sandbox. Kami menambahkan Core_Data.sqlite ke lokasi dan menyimpannya di storeURL untuk digunakan nanti.

Secara default, nama store di disk sama dengan nama dari proyek. Anda dapat mengubahnya ke apapun yang Anda inginkan.

Seperti yang saya sebutkan beberapa saat yang lalu, ekstensi .sqlite mengisyaratkan bahwa penyimpanan pada disk adalah basis data SQLite. Meskipun Core Data mendukung beberapa jenis store, SQLite adalah jenis store yang paling banyak digunakan karena kecepatan dan keandalannya.

Pada langkah berikutnya, kita instantiate koordinator persistent store dengan memohon initWithManagedObjectModel: dan melewati contoh NSManagedObjectModel. Kami mengambil referensi ke model objek yang dikelola dengan menerapkan method managedObjectModel, yang akan kita bahas selanjutnya.

Kami sekarang memiliki instance dari class NSPersistentStoreCoordinator, tetapi belum ada store yang terkait dengannya. Kami menambahkan toko ke koordinator toko persisten dengan memanggil method yang cukup mengesankan di atasnya, addPersistentStoreWithType:configuration:URL:options:error.

Argumen pertama menentukan jenis store, NSSQLiteStoreType dalam contoh ini. Core Data juga mendukung binary store (NSBinaryStoreType) dan memory store (NSInMemoryStoreType).

Argumen kedua memberitahu Core Data konfigurasi mana yang digunakan untuk penyimpanan persisten. Kami lulus nil, yang memberitahu Core Data untuk menggunakan konfigurasi default. Argumen ketiga adalah lokasi store, yang disimpan di storeURL.

Argumen keempat adalah NSDictionary dari pilihan yang memungkinkan kita mengubah perilaku persisten store. Kami akan meninjau kembali aspek ini nanti dalam seri ini dan lulus dengan nil untuk saat ini. Argumen terakhir adalah referensi ke pointer NSError.

Jika tidak ada kesalahan muncul, method ini mengembalikan objek NSPersistentStore. Kami tidak menyimpan referensi ke toko persisten, karena kami tidak perlu berinteraksi dengannya setelah ditambahkan ke koordinator persistent store.

Jika menambahkan penyimpanan persisten store gagal, itu berarti ada masalah dengan penyimpanan aplikasi yang terus-menerus dan kita perlu mengambil langkah yang diperlukan untuk menyelesaikan masalah. Ketika ini terjadi dan mengapa itu terjadi adalah subjek dari angsuran masa depan.

Saat ini, abort dipanggil saat addPersistentStoreWithType:configuration: URL:option:error: mengembalikan nil. Seperti komentar dalam pernyataan if yang menjelaskan, Anda seharusnya tidak pernah abort panggilan di lingkungan produksi, karena aplikasi macet. Kami akan memperbaikinya nanti di seri ini.

Langkah 5: Managed Object Model

Bagian ketiga dan terakhir dari puzzle adalah managed object model. Mari kita lihat pengambil properti managedObjectModel.

Implementasinya sangat mudah. Kami menyimpan lokasi model aplikasi di modelURL dan meneruskan modelURL ke initWithContentsOfURL: untuk membuat instance dari class NSManagedObjectModel.

Pada titik ini, Anda mungkin bertanya-tanya model apa yang modelURL tunjuk dan apa file dengan ekstensi .momd. Untuk menjawab pertanyaan-pertanyaan ini, kita perlu mencari tahu apa lagi yang dibuat Xcode untuk kita selama pengaturan proyek.

Di Navigator Proyek di sebelah kiri, Anda akan melihat file bernama Core_Data.xcdatamodeld. Ini adalah model data dari aplikasi yang dikompilasi ke file .momd. Itu adalah file .momd yang digunakan oleh model objek yang dikelola untuk membuat model data aplikasi.

Dimungkinkan untuk memiliki beberapa file model data. Class NSManagedObjectModel sangat mampu menggabungkan beberapa model data menjadi satu, yang merupakan salah satu fitur yang lebih kuat dan canggih dari Core Data.

Framework Core Data juga mendukung versi model data  serta migrasi. Ini memastikan bahwa data yang disimpan di persisten store(s) tidak rusak. Kami akan membahas versi dan migrasi nanti dalam seri ini.

File model data dalam proyek kami kosong saat ini, yang berarti bahwa model data kami tidak mengandung entitas. Kami akan memperbaikinya dalam tutorial berikutnya yang akan memfokuskan secara eksklusif pada model data.

6. Putting It All Together

Sebelum kita menyelesaikan artikel ini, saya ingin menunjukkan kepada Anda diagram yang mengilustrasikan tiga komponen tumpukan Core Data.

Diagram di atas adalah representasi visual dari apa yang kita dieksplorasi dalam template Xcode beberapa saat yang lalu. Objek NSPersistentStoreCoordinator adalah otak dari tumpukan Core Data dari aplikasi. Ini berbicara ke satu atau lebih toko yang terus-menerus dan memastikan data disimpan, dimuat, dan disimpan dalam cache.

Koordinator persistent store mengetahui tentang model data, skema grafik objek jika Anda suka, melalui objek NSManagedObjectModel. Model objek yang dikelola menciptakan model data aplikasi dari satu atau lebih file .momd, representasi biner dari model data.

Terakhir tapi bukan yang akhir, aplikasi mengakses grafik objek melalui satu atau lebih instance dari class NSManagedObjectContext. Konteks objek yang dikelola tahu tentang model data melalui koordinator persisten store, tetapi tidak tahu atau menyimpan referensi ke model objek yang dikelola. Tidak perlu koneksi itu.

Konteks objek yang dikelola meminta koordinator terus-menerus untuk data dan memberitahukannya untuk menyimpan data bila diperlukan. Konteks objek yang dikelola meminta koordinator terus-menerus untuk data dan memberitahukannya untuk menyimpan data bila diperlukan.

Kesimpulan

Dalam artikel ini, kami membahas pemain kunci dari tumpukan Core Data, koordinator persisten store, model objek yang dikelola, dan konteks objek yang dikelola. Pastikan Anda memahami peran masing-masing komponen dan, yang lebih penting, bagaimana mereka bekerja sama untuk membuat Core Data melakukan keajaibannya.

Dalam rangkaian berikutnya dari seri ini di Core Data, kami akan mendalami ke dalam model data. Kami melihat pada editor model data di Xcode 5 dan kami membuat beberapa entitas, atribut, dan hubungan.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.