Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Core Data
Code

Core Data dan Swift: Core Data Stack

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Core Data and Swift.
Core Data and Swift: Data Model

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

Pengenalan

Kerangka Data inti telah sekitar selama bertahun-tahun. Hal ini digunakan dalam ribuan aplikasi dan oleh jutaan orang, baik pada iOS dan Data inti OS X. dikelola oleh Apple dan sangat baik didokumentasikan. Ini adalah kerangka dewasa yang telah membuktikan nilai itu berulang-ulang.

Meskipun Data inti sangat bergantung pada runtime Objective-C dan terintegrasi rapi dengan kerangka kerja pondasi utama, Anda dapat dengan mudah menggunakan kerangka kerja dalam proyek Anda cepat. Hasilnya adalah sebuah kerangka kerja yang mudah digunakan untuk mengelola grafik objek yang elegan untuk digunakan dan sangat efisien dalam hal penggunaan memori.

1. prasyarat

Data inti kerangka tidak sulit per se, tetapi jika Anda baru untuk iOS atau OS X pengembangan, maka saya sarankan Anda pertama kali pergi melalui seri kami tentang iOS pengembangan. Ini mengajarkan Anda dasar-dasar iOS pengembangan dan, pada akhir dari seri, Anda akan memiliki pengetahuan yang cukup untuk mengambil topik-topik yang lebih kompleks, seperti Data inti.

Seperti saya katakan, inti Data tidak sebagai kompleks atau sulit untuk mengambil sebagian besar pengembang berpikir. Namun, saya telah belajar bahwa dasar yang kuat sangat penting untuk mendapatkan sampai dengan kecepatan dengan Data inti. Anda perlu memiliki pemahaman inti Data API untuk menghindari praktek-praktek buruk dan pastikan Anda tidak mengalami masalah menggunakan kerangka.

Setiap komponen inti Data kerangka memiliki tujuan tertentu dan fungsi. Jika Anda mencoba untuk menggunakan Data inti di jalan itu tidak dirancang untuk, Anda pasti akan berakhir berjuang dengan kerangka.

Apa yang saya membahas dalam seri ini pada inti Data ini berlaku untuk iOS 7 + dan OS X 10.10+, tetapi akan fokus pada iOS. Dalam seri ini, saya akan bekerja dengan Xcode 7,1 dan Swift 2.1. Jika Anda memilih Objective-C, maka saya menyarankan membaca seri sebelumnya kerangka Data inti.

2. kurva belajar

Data inti kerangka dapat tampak menakutkan pada awalnya, tetapi API intuitif dan ringkas setelah Anda memahami bagaimana berbagai potongan teka-teki cocok bersama. Dan itulah mengapa sebagian besar pengembang mengalami masalah menggunakan kerangka. Mereka mencoba untuk menggunakan Data inti sebelum mereka telah melihat teka-teki pepatah, mereka tidak tahu bagaimana potongan-potongan teka-teki cocok bersama dan berhubungan satu sama lain.

Dalam artikel ini, saya akan membantu Anda menjadi akrab dengan tumpukan Data inti. Setelah Anda memahami pemain kunci tumpukan Data inti, kerangka akan merasa kurang menakutkan dan Anda akan bahkan mulai menikmati dan menghargai kerangka yang dikarang dengan baik API.

Berbeda dengan kerangka kerja seperti UIKit, yang dapat Anda gunakan tanpa memahami kerangka secara keseluruhan, Data inti membutuhkan pemahaman yang blok bangunan. Hal ini penting untuk menyisihkan waktu untuk menjadi akrab dengan kerangka kerja, yang kita akan lakukan dalam tutorial ini.

3. apa yang dimaksud dengan Data inti?

Pengembang baru untuk kerangka Data inti sering bingung dengan dan mengharapkan untuk bekerja sebagai database. Jika ada satu hal yang saya berharap Anda akan ingat dari seri ini, itu adalah bahwa inti Data tidak database dan Anda seharusnya tidak mengharapkan itu bertindak seperti satu.

Apakah Data inti jika tidak database? Data inti adalah model lapisan aplikasi Anda dalam arti mungkin. Ini adalah Model dalam pola Model-View-Controller yang meresapi iOS SDK.

Data inti tidak database aplikasi Anda juga tidak API untuk bertahan data ke database. Data inti adalah kerangka yang mengelola grafik objek. Ini yang sederhana seperti itu. Data inti dapat bertahan bahwa grafik objek dengan menulis ke disk, tapi itu tidak tujuan utama dari kerangka.

4. inti Data Stack

Seperti yang saya sebutkan sebelumnya, tumpukan Data inti adalah jantung dari Data inti. Ini adalah koleksi benda-benda yang membuat Data inti kutu. Objek utama tumpukan adalah managed object model, Koordinator toko terus-menerus, dan satu atau lebih objek dikelola konteks. Mari kita mulai dengan mengambil cepat melihat setiap komponen.

NSManagedObjectModel

Managed object model mewakili data model dari aplikasi. Meskipun Data inti tidak database, Anda dapat membandingkan managed object model untuk skema database, yang berisi informasi tentang model atau entitas grafik objek, atribut apa yang mereka miliki, dan bagaimana mereka berhubungan satu sama lain.

Objek NSManagedObjectModel tahu tentang data model dengan memuat satu atau lebih file model data selama inisialisasi nya. Kita akan melihat bagaimana ini bekerja dalam beberapa saat.

NSPersistentStoreCoordinator

Seperti namanya menunjukkan, objek NSPersistentStoreCoordinator berlanjut data ke disk dan memastikan store(s) gigih dan data model yang kompatibel. Menengahi antara store(s) gigih dan dikelola objek context(s) dan juga mengurus loading dan caching data. Itu benar. Data inti memiliki cache dibangun di.

Koordinator gigih toko adalah konduktor orkestra Data inti. Meskipun perannya yang penting dalam tumpukan Data inti, Anda akan jarang berinteraksi dengan itu langsung.

NSManagedObjectContext

Objek NSManagedObjectContext mengelola koleksi benda-benda model, contoh kelas NSManagedObject. Dimungkinkan untuk aplikasi untuk memiliki beberapa konteks dikelola objek. Konteks objek dikelola setiap didukung oleh seorang Koordinator gigih toko.

Anda dapat melihat konteks dikelola objek sebagai kerja di mana Anda bekerja dengan benda-benda model Anda. Anda beban mereka, Anda memanipulasi mereka, dan menyimpannya pada workbench itu. Loading dan menyimpan dimediasi oleh Koordinator gigih toko. Anda dapat memiliki beberapa workbenches, sangat bermanfaat jika aplikasi Anda multi-threaded, misalnya.

Sementara model object yang dikelola dan gigih toko Koordinator dapat dibagi benang, konteks dikelola objek harus pernah dapat diakses dari sebuah thread yang berbeda daripada yang mereka diciptakan di. Kita akan membahas multithreading secara lebih rinci nanti dalam seri ini.

5. menjelajahi tumpukan Data inti

Langkah 1: Setup proyek

Mari kita menjelajahi tumpukan Data inti secara lebih rinci dengan mengambil melihat pada contoh. Membuat proyek baru di Xcode 7 dengan memilih New > proyek... dari Berkas menu. Pilih satu aplikasi Lihat template dari daftar iOS > aplikasi template di sebelah kiri.

Project Setup

Nama proyek Data inti, menetapkan bahasa untuk Swift, perangkat untuk iPhone, dan periksa kotak centang yang berlabel penggunaan inti Data. Memberitahu Xcode dimana Anda ingin menyimpan file proyek dan klik buat.

Project Configuration

Langkah 2: Ikhtisar

Secara default, Apple menempatkan kode yang terkait dengan Data inti aplikasi delegasi kelas, kelas AppDelegate dalam contoh. Buka AppDelegate.swift dan mari kita mulai menjelajahi pelaksanaan kelas AppDelegate.

Di bagian atas AppDelegate.swift, Anda harus melihat pernyataan impor Data inti Framework.

AppDelegate kelas lebih lanjut berisi empat sifat malas disimpan:

  • applicationDocumentsDirectory jenis NSURL
  • managedObjectModel jenis NSManagedObjectModel
  • managedObjectContext jenis NSManagedObjectContext
  • persistentStoreCoordinator jenis NSPersistentStoreCoordinator

Properti pertama, applicationDocumentsDirectory, adalah tidak lebih daripada seorang penolong untuk mengakses direktori dokumen aplikasi. Implementasi ini cukup sederhana seperti yang Anda lihat di bawah ini. Kelas NSFileManager digunakan untuk mengambil lokasi direktori dokumen aplikasi.

Tersisa tiga malas disimpan sifat lebih menarik dan langsung berkaitan dengan kerangka Data inti. Kita pertama akan menjelajahi properti managedObjectContext.

Langkah 3: Berhasil konteks objek

Kelas Anda akan menggunakan paling sering, selain NSManagedObject, ketika berinteraksi dengan Data inti NSManagedObjectContext.

Catatan bahwa objek NSManagedObjectContext instantiated dan dikonfigurasi dalam sebuah penutupan. Dalam penutupan, kita pertama kali mendapatkan referensi untuk Koordinator gigih toko. Kami kemudian instantiate NSManagedObjectContext, melewati dalam. MainQueueConcurrencyType sebagai argumen pertama. Anda akan belajar lebih banyak tentang jenis concurrency nanti dalam seri ini. Oleh lewat di. MainQueueConcurrencyType, kami menunjukkan bahwa konteks dikelola objek akan melakukan tugasnya menggunakan antrian benang.

Sebelum kita kembali konteks dikelola objek, kami menetapkan objek persistentStoreCoordinator properti. Tanpa Koordinator gigih toko, konteks dikelola objek yang tidak berguna. Itu tidak terlalu sulit. Apakah itu?

Singkatnya, konteks dikelola objek mengelola koleksi benda-benda model, contoh kelas NSManagedObject, dan membuat referensi untuk Koordinator gigih toko. Ingatlah ini saat membaca sisa artikel ini.

Langkah 4: Terus-menerus toko Koordinator

Seperti yang kita lihat beberapa saat yang lalu, properti persistentStoreCoordinator diakses selama konfigurasi konteks dikelola objek. Lihatlah pelaksanaan properti persistentStoreCoordinator, tapi jangan biarkan menakut-nakuti Anda. Hal ini benar-benar tidak yang rumit.

Anda akan hampir selalu ingin menyimpan Data inti objek grafik ke disk dan Apple pelaksanaan properti persistentStoreCoordinator menggunakan SQLite database untuk mencapai hal ini. Ini adalah skenario yang umum untuk Data inti aplikasi.

Dalam penutupan properti persistentStoreCoordinator, kami mulai oleh instantiating sebuah instance dari kelas NSPersistentStoreCoordinator, melewati dalam model objek dikelola sebagai argumen. Kita akan menjelajahi properti managedObjectModel dalam sekejap.

Seperti yang Anda lihat, membuat objek NSPersistentStoreCoordinator mudah. Namun, seorang Koordinator gigih toko adalah kurang bermanfaat jika tidak memiliki toko apapun gigih untuk mengelola. Sisa penutupan, kami berusaha untuk memuat sebuah toko yang gigih dan menambahkannya ke Koordinator gigih toko.

Kita mulai dengan menentukan lokasi toko pada disk, menggunakan properti applicationDocumentsDirectory kita lihat sebelumnya. Hasilnya, sebuah objek NSURL, dilewatkan ke metode addPersistentStoreWithType(_:configuration:URL:options:) kelas NSPersistentStoreCoordinator. Sebagai metode yang namanya menunjukkan, metode menambah toko gigih Koordinator gigih toko. Metode menerima empat argumen.

Kami pertama menentukan jenis toko, NSSQLiteStoreType dalam contoh ini. Data inti juga mendukung toko biner (NSBinaryStoreType) dan menyimpan di memori (NSInMemoryStoreType).

Argumen kedua mengatakan kepada Data inti konfigurasi yang digunakan untuk toko terus-menerus. Kami melewati di nil, yang mengatakan kepada Data inti menggunakan konfigurasi default. Argumen ketiga adalah lokasi toko, yang disimpan dalam url.

Argumen keempat adalah sebuah kamus pilihan yang memungkinkan kita mengubah perilaku toko terus-menerus. Kami akan meninjau kembali aspek ini kemudian di seri ini dan lulus dalam nol untuk sekarang.

Karena addPersistentStoreWithType(_:configuration:URL:options:) merupakan metode melempar, kami membungkus panggilan metode dalam sebuah pernyataan do-menangkap. Jika tidak ada kesalahan muncul, metode ini mengembalikan sebuah objek NSPersistentStore. Kami tidak menyimpan referensi ke toko gigih, karena kita tidak perlu berinteraksi dengan itu setelah itu ditambahkan ke toko gigih Koordinator.

Jika menambahkan toko terus-menerus gagal, meskipun, itu berarti bahwa ada masalah dengan gigih toko aplikasi dan kita harus mengambil langkah yang diperlukan untuk menyelesaikan masalah. Ketika ini terjadi dan mengapa itu terjadi adalah subyek dari masa depan angsuran dari seri ini.

Dalam klausa menangkap, kami log kesalahan ke konsol dan abort dipanggil. Anda harus tidak pernah menyebut membatalkan dalam lingkungan produksi, karena crash aplikasi. Kami akan menerapkan solusi kurang agresif kemudian dalam seri ini.

Langkah 5: Managed Object Model

Bagian ketiga dan terakhir dari teka-teki adalah managed object model. Mari kita lihat pada pelaksanaan properti managedObjectModel.

Implementasi ini sangat mudah. Kami menyimpan lokasi aplikasi model dalam modelURL dan menggunakannya selama Instansiasi managed object model.

Karena initializer, init(contentsOfURL:), kembali opsional, kita memaksa membuka sebelum kembali hasilnya. Bukankah itu berbahaya? Ya dan tidak. Hal ini tidak dianjurkan untuk kekuatan membuka optionals. Namun, gagal untuk menginisialisasi managed object model berarti bahwa aplikasi tidak dapat menemukan data model dalam bundel aplikasi. Jika itu terjadi, kemudian sesuatu yang tidak beres itu adalah di luar kendali dari aplikasi.

Pada titik ini, Anda Anda mungkin bertanya-tanya apa model yang modelURL menunjuk ke dan apa file dengan ekstensi .momd. Untuk menjawab pertanyaan-pertanyaan ini, kita perlu mengetahui apa yang lain Xcode telah menciptakan bagi kita selama setup proyek.

Di proyek navigasi di sebelah kiri, Anda akan melihat sebuah file bernama Core_Data.xcdatamodeld. Ini adalah model data dari aplikasi yang dikompilasi ke .momd file. Ini adalah bahwa file .momd yang menggunakan managed object model untuk membuat model data aplikasi.

Core Data Model

Dimungkinkan untuk memiliki beberapa data model file. Golongan NSManagedObjectModel sempurna mampu penggabungan beberapa model data menjadi satu, yang merupakan salah satu fitur yang lebih kuat dan canggih dari Data inti.

Kerangka Data inti juga mendukung data model versi serta migrasi. Hal ini memastikan bahwa data yang disimpan dalam store(s) terus-menerus tidak rusak. Kami akan mencakup versi dan migrasi-migrasi kemudian dalam seri ini.

Berkas model data dalam proyek Anda masih kosong pada saat ini, yang berarti bahwa model data Anda berisi entitas tidak. Kami akan memperbaiki hal ini dalam tutorial berikutnya yang akan fokus secara eksklusif pada data model.

6. memasang itu sama sekali

Sebelum kami membungkus artikel ini, saya ingin menunjukkan kepada Anda sebuah diagram yang menggambarkan tiga komponen tumpukan Data inti.

Core Data Stack

Diagram di atas adalah representasi visual dari apa yang kita mengeksplorasi dalam proyek contoh beberapa saat yang lalu. Tujuan NSPersistentStoreCoordinator adalah otak tumpukan Data inti aplikasi. Itu berbicara kepada satu atau lebih gigih toko dan memastikan data disimpan, dimuat, dan di-cache.

Koordinator gigih toko tahu tentang data model, skema grafik objek jika Anda suka, melalui NSManagedObjectModel objek. Managed object model menciptakan model data aplikasi dari satu atau lebih file .momd, biner representasi data model.

Terakhir tetapi tidak paling, aplikasi akan mengakses grafik objek melalui satu atau beberapa kelas NSManagedObjectContext. Konteks dikelola objek yang tahu tentang model data melalui Koordinator gigih toko, tetapi tidak tahu atau menyimpan referensi untuk managed object model. Ada tidak perlu untuk referensi semacam itu.

Konteks objek dikelola meminta Koordinator gigih untuk data dan mengatakan itu untuk menyimpan data bila diperlukan. Ini semua dilakukan untuk Anda dengan kerangka inti Data dan aplikasi Anda jarang perlu berbicara dengan koordinator gigih toko langsung.

Kesimpulan

Dalam artikel ini, kita membahas pemain kunci dari tumpukan Data inti, Koordinator gigih toko, managed object model dan konteks dikelola objek. Pastikan Anda memahami peranan masing-masing komponen dan, lebih penting lagi, bagaimana mereka bekerja bersama-sama untuk membuat Data inti melakukan sihir.

Angsuran berikutnya dari seri ini, kita menyelam ke dalam data model. Kami mengambil melihat data model editor di Xcode dan kami membuat beberapa entitas, atribut dan hubungan.

Advertisement
Advertisement
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.