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

Core Data dan Swift: NSFetchedResultsController

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Core Data and Swift.
Core Data and Swift: Relationships and More Fetching
Core Data and Swift: More NSFetchedResultsController

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

Dalam angsuran sebelumnya dari seri ini, kita membahas dasar-dasar framework Core Data. Saatnya kita menggunakan pengetahuan kita untuk membangun aplikasi sederhana yang didukung oleh Core Data.

Dalam tutorial ini, kita juga akan bertemu pemain bintang lain dari framework Core Data, class NSFetchedResultsController. Aplikasi yang akan kita buat mengelola daftar item yang harus dilakukan. Dengan aplikasi ini, kita dapat menambahkan, memperbarui, dan menghapus item yang harus dilakukan. Kamu akan segera belajar bahwa class NSFetchedResultsController menjadikan ini sangat mudah dilakukan.

Prasyarat

Apa yang saya bahas dalam seri ini pada Core Data berlaku untuk iOS 7+ dan OS X 10.10+, tetapi fokusnya adalah pada iOS. Dalam seri ini, saya akan bekerja dengan Xcode 7.1 dan Swift 2.1. Jika kamu lebih suka Objective-C, maka saya sarankan membaca seri saya sebelumnya pada framework Core Data.

1. Pengaturan Proyek

Buka Xcode, pilih New > Project... dari menu File, dan pilih template Single View Application dari kategori iOS > Application.

Choosing the Single View Application Template

Nama proyeknya Done, atur Language ke Swift, dan atur Devices ke iPhone. Karena saya ingin menunjukkan kepada Anda cara membuat aplikasi Data Inti dari awal, pastikan bahwa kotak centang berlabel Use Core Data tidak dicentang. Beri tahu Xcode dimana kamu ingin menyimpan proyek dan tekan Create untuk membuat proyek.

Configuring the Project

2. Pengaturan Core Data

Buka AppDelegate.swift dan deklarasikan tiga properti yang disimpan secara tersembunyi managedObjectModel dari tipe NSManagedObjectModel, managedObjectContext dari tipe NSManagedObjectContext, dan persistentStoreCoordinator dari tipe NSPersistentStoreCoordinator. Jika kamu bingung dengan langkah ini, maka saya sarankan kamu mengunjungi kembali artikel pertama dari seri ini, yang mencakup susunan Core Data secara mendetail.

Perhatikan bahwa saya juga menambahkan pernyataan impor untuk framework Core Data di bagian atas AppDelegate.swift.

Ingat bahwa kami menggunakan kata kunci lazy untuk dengan malas mengatur susunan Core Data. Ini berarti bahwa kita memberi contoh konteks objek yang dikelola, model objek yang dikelola, dan koordinator penyimpan yang gigih pada saat mereka dibutuhkan oleh aplikasi. Implementasi berikut akan terlihat sangat akrab.

Ada tiga hal yang harus kamu waspadai. Pertama, model data, yang akan kita buat selanjutnya, akan diberi nama Done.momd. Kedua, kita akan menamakan penyokong penyimpan Done dan itu akan menjadi database SQLite. Ketiga, jika penyokong penyimpan tidak kompatibel dengan model data, kita meminta abort, membunuh aplikasi. Seperti yang saya sebutkan sebelumnya dalam seri ini, sementara ini baik-baik saja selama pengembangan, kamu seharusnya tidak pernah memanggil abort dalam produksi. Kita akan meninjau kembali masalah migrasi dan ketidaksesuaian nanti dalam seri ini.

Meskipun aplikasi kita tidak akan mogok jika kamu mencoba menjalankannya, susunan Core Data tidak akan disiapkan dengan benar. Alasannya sederhana, kita belum membuat model data. Mari kita urus itu di langkah selanjutnya.

3. Membuat Model Data

Pilih New > File... dari menu File dan pilih Data Model dari kategori iOS > Core Data.

Creating the Data Model

Beri nama file Done, periksa kembali bahwa itu ditambahkan ke target Done, dan beri tahu Xcode di mana ia harus disimpan.

Naming the Data Model

Model data akan sangat sederhana. Buat entitas baru dan beri nama Item. Tambahkan tiga atribut ke entitas, name dari tipe String, createdAt dari tipe Date, dan done dari tipe Boolean.

Creating the Item Entity

Tandai atribut sesuai kebutuhan, bukan opsional, dan atur nilai default dari atribut done ke NO.

Configuring the Done Attribute

Susunan Core Data sudah diatur dan model data dikonfigurasi dengan benar. Saatnya untuk menjadi akrab dengan class baru dari framework Core Data, class NSFetchedResultsController.

4. Mengelola Data

Artikel ini tidak hanya tentang class NSFetchedResultsController, ini tentang apa yang dilakukan class NSFetchedResultsController di belakang layar. Biarkan saya mengklarifikasi apa yang saya maksudkan dengan ini.

Jika kita membangun aplikasi kita tanpa class NSFetchedResultsController, kita perlu menemukan cara untuk menjaga antarmuka pengguna aplikasi yang disinkronkan dengan data yang dikelola oleh Core Data. Untungnya, Core Data memiliki solusi elegan untuk masalah ini.

Setiap kali record dimasukkan, diperbarui, atau dihapus dalam konteks objek yang dikelola, konteks objek terkelola tersebut mengirim notifikasi melalui pusat pemberitahuan. Konteks objek yang dikelola mengirim tiga jenis pemberitahuan:

  • NSManagedObjectContextObjectsDidChangeNotification: Pemberitahuan ini dikirim setiap kali record dalam konteks objek terkelola dimasukkan, diperbarui, atau dihapus.
  • NSManagedObjectContextWillSaveNotification: Pemberitahuan ini dikirim oleh konteks objek yang dikelola sebelum perubahan yang menunggu dilakukan pada penyokong penyimpan.
  • NSManagedObjectContextDidSaveNotification: Pemberitahuan ini diposting oleh konteks objek yang dikelola segera setelah perubahan yang tertunda telah dilakukan pada penyokong penyimpan.

Isi pemberitahuan ini identik, yaitu, properti object dari notifikasinya adalah instance NSManagedObjectContext mengiirim notifikasi dan notifikasi userInfo berisi record yang disisipkan, diperbarui, dan dihapus.

Intinya adalah bahwa hal itu membutuhkan cukup banyak kode boilerplate untuk menjaga hasil permintaan pemgambilan yang terbaru. Dengan kata lain, jika kita membuat aplikasi kita tanpa menggunakan class NSFetchedResultsController, kita harus mengimplementasikan mekanisme yang memantau konteks objek yang dikelola untuk perubahan dan memperbarui antarmuka pengguna yang sesuai. Mari kita lihat bagaimana NSFetchedResultsController dapat membantu kita dengan tugas ini.

5. Mengatur Antarmuka Pengguna

Bekerja dengan kelas NSFetchedResultsController cukup mudah. Sebuah instance dari class NSFetchedResultsController mengambil permintaan pengambilan dan memiliki objek delegasi. Objek NSFetchedResultsController memastikan bahwa itu membuat hasil permintaan pengambilan yang terbaru dengan memantau konteks objek yang dikelola permintaan pengambilan yang dieksekusi olehnya.

Jika objek NSFetchedResultsController memberitahukan tentang perubahan apa pun oleh objek NSManagedObjectContext dari permintaan pengambilan, ini akan memberitahu delegasinya. Kamu mungkin bertanya-tanya bagaimana ini berbeda dari view controller yang secara langsung memantau objek NSManagedObjectContext. Keindahan class NSFetchedResultsController adalah bahwa ia memproses pemberitahuan yang diterimanya dari objek NSManagedObjectContext dan hanya memberi tahu delegasi apa yang perlu diketahui untuk memperbarui antarmuka pengguna dalam menanggapi perubahan ini. Metode protokol NSFetchedResultsControllerDelegate seharusnya memperjelas ini.

Tanda tangan dari metode delegasi di atas mengungkapkan tujuan sebenarnya dari class NSFetchedResultsController. Di iOS, class NSFetchedResultsController dirancang untuk mengelola data yang ditampilkan oleh UITableView atau UICollectionView. Ini memberitahu delegasinya persis yang record berubah, bagaimana memperbarui antarmuka pengguna, dan kapan melakukan ini.

Jangan khawatir jika kamu masih tidak yakin tentang tujuan atau keuntungan class NSFetchedResultsController. Akan lebih masuk akal setelah kita menerapkan protokol NSFetchedResultsControllerDelegate. Mari kunjungi kembali aplikasi kita dan gunakan class NSFetchedResultsController untuk digunakan.

Langkah 1: Mengisi Storyboard

Buka storyboard utama proyek, Main.storyboard, pilih View Controller Scene, dan tanamkan dalam controller navigasi dengan memilih Embed In > Navigation Controller dari menu Editor.

Seret objek UITableView di View Controller Scene, buat outlet di class ViewController, dan hubungkan di storyboard. Jangan lupa untuk membuat class ViewController sesuai dengan protokol UITableViewDataSource dan UITableViewDelegate.

Pilih tampilan tabel, buka Connections Inspector, dan hubungkan tampilan tabel dataSource dan delegate outlet ke objek View Controller. Dengan tampilan tabel yang  dipilih, buka Attributes Inspector dan atur Prototype Cells menjadi 1.

Sebelum kita melanjutkan, kita perlu membuat subclass UITableViewCell untuk sel prototipe. Buat subclass Objective-C baru, ToDoCell, dan atur superclass-nya ke UITableViewCell. Buat dua outlet, nameLabel tipe UILabel dan doneButton dari tipe UIButton.

Kembali ke storyboard, pilih prototype cell dalam tampilan tabel, dan atur class-nya ke ToDoCell di Identity Inspector. Tambahkan UILabel dan objek UIButton ke tampilan konten sel dan hubungkan outlet di Connections Inspector. Dengan memilih prototype cell, buka Attributes Inspector dan atur pengenal prototype cell-nya ke ToDoCell. Pengenal ini akan berfungsi sebagai pengenal penggunaan kembali sel. Tata letak prototype cell akan terlihat seperti screenshot di bawah ini.

Creating the ToDoCell Prototype Cell

Buat sebuah subclass ViewController baru dan beri nama AddToDoViewController. Buka AddToDoViewController.swift, nyatakan textField outlet dari tipe UITextField dan sesuaikan view controller ke protokol UITextFieldDelegate.

Sebelum kita menambahkan viw controller ke storyboard, tambahkan dua aksi berikut ke file implementasi view controller.

Buka storyboard sekali lagi dan tambahkan item tombol bar dengan pengenal Add di sebelah kanan bilah navigasi ViewController. Tambahkan view controller baru ke storyboard dan atur class-nya ke AddToDoViewController di Identity Inspector. Dengan view controller yang dipilih, pilih Embed In > Navigation Controller dari menu Editor.

View Controller baru sekarang seharusnya memiliki bilah navigasi. Tambahkan dua item tombol bar ke bilah navigasi, satu di sebelah kiri dengan identitas Cancel dan satu di sebelah kanan dengan identitas Save. Hubungkan aksi cancel(_:) ke item tombol kiri dan aksi save(_:) ke item tombol bar kanan.

Tambahkan objek UITextField ke view controller dan posisikan 20 titik di bawah bilah navigasi. Field teks harus tetap pada 20 poin di bawah bilah navigasi. Perhatikan bahwa kendala tata letak di referensi atas panduan tata letak atas.

Adding Layout Constraints

Hubungkan bidang teks dengan outlet yang sesuai di view controller dan atur view controller sebagai delegasi field teks. Terakhir, tarik kontrol dari item tombol bilah ViewController ke controller navigasi yang mana AddToDoViewController adalah root view controller. Atur jenis segue ke Present Modally dan atur pengenal segue ke SegueAddToDoViewController di Attributes Inspector. Masih banyak yang harus dilakukan. Bagian yang menarik belum datang.

Langkah 2: Menerapkan Tampilan Tabel

Sebelum kita dapat mengambil aplikasi untuk berputar, kita perlu mengimplementasikan protokol UITableViewDataSource di class ViewController. Namun, ini adalah tempat class NSFetchedResultsController ikut bermain. Untuk memastikan bahwa semuanya bekerja kembali 0 dari metode tableView(_:numberOfRowsInSection:). Ini akan menghasilkan tampilan tabel kosong, tetapi ini akan memungkinkan kita untuk menjalankan aplikasi tanpa mengalami crash.

Untuk memuaskan compiler, kita juga perlu mengimplementasikan tableView(_:cellForRowAtIndexPath:). Di bagian atas AddToDoViewController.swift, tambahkan konstanta untuk pengenal reuse sel.

Mengimplementasikan tableView(_:cellForRowAtIndexPath:) cukup sederhana karena kita tidak melakukan sesuatu yang istimewa dengan sel tampilan tabel.

Langkah 3: Simpan dan Batal

Buka class AddToDoViewController dan terapkan metode cancel(_:) dan save(_:) seperti yang ditunjukkan di bawah ini. Kita akan memperbarui penerapannya nanti di tutorial ini.

Buat dan jalankan aplikasi di simulator untuk melihat apakah semuanya terhubung dengan benar. kamu seharusnya dapat menekan tombol tambah di kanan atas untuk memunculkan AddToDoViewController dan mengabaikannya dengan mengetuk tombol cancel atau save.

6. Menambahkan Class NSFetchedResultsController

Kelas NSFetchedResultsController adalah bagian dari kerangka Core Data dan itu dimaksudkan untuk mengelola hasil permintaan pengambilan. Kelas dirancang untuk bekerja secara lancar dengan UITableView dan UICollectionView di iOS dan NSTableView di OS X. Namun, ini dapat digunakan untuk tujuan lain juga.

Langkah 1: Meletakkan Dasar-dasar

Sebelum kita dapat mulai bekerja dengan clas NSFetchedResultsController, class ViewController memerlukan akses ke instance NSManagedObjectContext, contoh NSManagedObjectContext yang kita buat sebelumnya di delegasi aplikasi. Mulai dengan mendeklarasikan sebuah properti managedObjectContext dari tipe NSManagedObjectContext! di file header class ViewController. Perhatikan bahwa kita juga menambahkan pernyataan impor untuk framework Core Data di bagian atas.

Buka Main.storyboard, pilih storyboardview view controller pertama, instance UINavigationController, dan atur Storyboard ID-nya ke StoryboardIDRootNavigationController di Identity Inspector.

Dalam aplikasi aplikasi delegasi metide (_:didFinishLaunchingWithOptions:), kita mendapatkan referensi ke instance ViewController, root view controller dari controller navigasi, dan mengatur properti managedObjectContext. Metode aplikasi yang diperbarui (_:didFinishLaunchingWithOptions:) terlihat sebagai berikut:

Untuk memastikan semuanya berfungsi, tambahkan pernyataan cetak berikut ke metode viewDidLoad()  dari class ViewController.

Langkah 2: Menginisialisasi Instance NSFetchedResultsController

Buka file implementasi dari class ViewController dan deklarasikan sebuah properti yang disimpan malas dari tipe NSFetchedResultsController. Beri nama propertinya fetchedResultsController. Instance NSFetchedResultsController juga memiliki properti delegasi yang perlu mematuhi protokol NSFetchedResultsControllerDelegate. Karena instance ViewController akan berfungsi sebagai delegasi instance NSFetchedResultsController, kita perlu menyesuaikan kelas ViewController ke protokol NSFetchedResultsControllerDelegate seperti yang ditunjukkan di bawah ini.

Saatnya menginisialisasi instance NSFetchedResultsController. Inti dari controller hasil yang diambil adalah objek NSFetchRequest, karena ia menentukan record mana yang controller hasil yang diambil akan kelola Dalam metode viewDidLoad() view controller, kita menginisialisasi permintaan pengambilan dengan mengirimkan "Item" ke metode initWithEntityName(_ :). Ini seharusnya sudah dikenal sekarang dan begitu juga baris berikutnya di mana kita menambahkan deskriptor semacam ke permintaan pengambilan untuk mengurutkan hasil berdasarkan nilai atribut createdAt dari setiap record.

Inisialisasi controller hasil yang diambil ini cukup mudah. Metode init(fetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:) membutuhkan empat argumen:

  • permintaan pengambilan
  • konteks objek yang dikelola controller pengambilan hasil  yang diambil akan memantau
  • jalur kunci bagian jika kamu ingin hasilnya dibagi menjadi beberapa bagian
  • nama cache jika kamu ingin mengaktifkan caching

Kita meneruskan nil untuk dua parameter terakhir untuk saat ini. Argumen pertama sudah jelas, tetapi mengapa kita harus melewatkan objek NSManagedObjectContext juga? Tidak hanya dilewatkan dalam konteks objek terkelola yang digunakan untuk mengeksekusi permintaan pengambilan, ini juga merupakan konteks objek yang dikelola bahwa controller hasil yang diambil akan memantau perubahan. Ini akan menjadi lebih jelas dalam beberapa menit ketika kita mulai menerapkan metode delegasi dari protokol NSFetchedResultsControllerDelegate.

Akhirnya, kita perlu memberi tahu pengontrol hasil yang diambil untuk menjalankan permintaan pengambilan yang kita lewati. Kita melakukan ini dengan menerapkan performFetch() di viewDidLoad(). Perhatikan bahwa ini adalah metode throwing, yang berarti kita perlu membungkusnya dalam pernyataan do-catch. Metode performFetch() mirip dengan metode executeFetchRequest(_:) dari class NSManagedObjectContext.

Langkah 3: Menerapkan Protokol Delegasi

Dengan controller hasil yang diambil mengatur dan siap digunakan, kita perlu mengimplementasikan protokol NSFetchedResultsControllerDelegate. Seperti yang kita lihat sebelumnya, protokol mendefinisikan lima metode, tiga di antaranya menarik bagi kita dalam tutorial ini:

  • controllerWillChangeContent(controller: NSFetchedResultsController)
  • controllerDidChangeContent(controller: NSFetchedResultsController)
  • controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)

Dua metode pertama memberi tahu kita kapan data yang dihasilkan controller pengambilan hasil mengelola kehendak dan memang berubah. Ini penting untuk memperbarui antarmuka pengguna. Misalnya, ada kemungkinan bahwa beberapa perubahan terjadi pada saat yang bersamaan. Daripada memperbarui antarmuka pengguna untuk setiap perubahan, kita mengumpulkan pembaruan antarmuka pengguna setelah semua perubahan dilakukan.

Dalam contoh kita, ini bermuara pada implementasi pada controllerWillChangeContent(controller: NSFetchedResultsController) dan controllerDidChangeContent(controller: NSFetchedResultsController).

Implementasi controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)  agak sedikit rumit. Metode delegasi ini membutuhkan tidak kurang dari lima argumen:

  • instance NSFetchedResultsController
  • instance NSManagedObject yang berubah
  • jalur indeks saat ini dari record dalam controller hasil yang diambil
  • jenis perubahan, yaitu insertupdate, atau delete
  • jalur indeks baru dari record di controller hasil yang diambil, setelah perubahan

Perhatikan bahwa jalur indeks tidak ada hubungannya dengan tampilan tabel kita. NSIndexPath tidak lebih dari objek yang berisi satu atau lebih indeks untuk mewakili jalur dalam struktur hirarkis karena nama class.

Secara internal controller hasil yang diambil mengelola struktur data hirarkis dan memberitahukan delegasinya ketika struktur data tersebut berubah. Terserah pada kita untuk memvisualisasikan perubahan tersebut, misalnya, tampilan tabel.

Implementasi controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) tampak menakutkan, tapi biarkan saya memandumu melalui itu.

Jenis perubahan adalah tipe NSFetchedResultsChangeType. Pencacahan ini memiliki empat nilai anggota:

  • Insert
  • Delete
  • Move
  • Update

Nama-nama itu cukup jelas. Jika jenisnya adalah Insert, kita beri tahu tampilan tabel untuk menyisipkan baris di newIndexPath. Demikian pula, jika jenisnya Delete, kita menghapus baris di indexPath dari tampilan tabel.

Jika catatan diperbarui, kita memperbarui baris terkait dalam tampilan tabel dengan menerapkan configureCell(_:atIndexPath:), metode helper yang menerima objek ToDoCell dan objek NSIndexPath. Kita akan menerapkan metode ini sebentar lagi.

Jika jenis perubahan sama dengan Move, kita menghapus baris pada indexPath dan menyisipkan baris di newIndexPath untuk mencerminkan posisi pembaruan catatan dalam struktur data internal pengambil keputusan yang diambil.

Langkah 4: Menerapkan Protokol UITableViewDataSource

Itu tidak terlalu sulit. Apakah itu? Menerapkan protokol UITableViewDataSource jauh lebih mudah, tetapi ada beberapa hal yang harus kamu ketahui. Mari kita mulai dengan numberOfSectionsInTableView(_:) dan tableView(_:numberOfRowsInSection :.

Meskipun tampilan tabel dalam aplikasi contoh kita hanya akan memiliki satu bagian, mari tanyakan controller hasil yang diambil untuk jumlah bagian. Kami melakukan ini dengan memanggil selection di atasnya, yang mengembalikan array objek yang sesuai dengan protokol NSFetchedResultsSectionInfo.

Objek yang sesuai dengan protokol NSFetchedResultsSectionInfo perlu menerapkan beberapa metode dan properti, termasuk numberOfObjects. Ini memberi kita apa yang kita perlukan untuk mengimplementasikan dua metode pertama dari protokol UITableViewDataSource.

Selanjutnya adalah tableView(_:cellForRowAtIndexPath:) dan configureCell(_:atIndexPath:). Implementasi tableView(_: cellForRowAtIndexPath:) pendek, karena kita memindahkan sebagian besar konfigurasi sel ke configureCell(_: atIndexPath:). Kami meminta tampilan tabel untuk sel yang dapat digunakan kembali dengan pengenal penggunaan ulang ReuseIdentifierToDoCell dan meneruskan sel dan jalur indeks ke configureCell(_:atIndexPath:).

Keajaiban terjadi di configureCell(_: atIndexPath:). Kita meminta controller hasil yang diambil untuk item di indexPath. Controller hasil yang diambil mengembalikan instance NSManagedObject kepada kita. Kita memperbarui nameLabel dan status doneButton dengan meminta record untuk atribut name dan done.

Kita akan meninjau kembali protokol UITableViewDataSource nanti di tutorial ini ketika kita menghapus item dari daftar. Pertama-tama kita perlu mengisi tampilan tabel dengan beberapa data.

7. Menambahkan Record

Mari kita selesaikan tutorial ini dengan menambahkan kemampuan untuk membuat item yang harus dilakukan. Buka class AddToDoViewController, tambahkan pernyataan impor untuk framework Core Data, dan nyatakan properti managedObjectContext dari jenis NSManagedObjectContext!.

Kembali ke class ViewController dan implementasikan metode prepareForSegue(_:sender:). Dalam metode ini, kita mengatur properti managedObjectContext dari instance AddToDoViewController. Jika kamu pernah bekerja dengan storyboard sebelumnya, maka implementasi prepareForSegue (_:sender:) seharusnya mudah.

Jika pengguna memasukkan teks di field teks AddToDoViewController dan mengetuk tombol Save, kita membuat record baru, mengisinya dengan data, dan menyimpannya. Logika ini masuk ke metode save(_:) yang kami buat sebelumnya.

Metode save(_ :) terlihat sangat mengesankan, tetapi tidak ada apa pun di sana yang belum kita bahas. Kita membuat objek yang dikelola baru, menggunakan instance NSEntityDescription dan instance NSManagedObjectContext. Kita kemudian mengisi objek yang dikelola dengan nama dan tanggal.

Jika menyimpan konteks objek terkelola berhasil, kita mengabaikan view controller, jika tidak kita menampilkan peringatan dengan memunculkan showAlertWithTitle(_:message:cancelButtonTitle:), sebuah metode helper. Jika pengguna mengetuk tombol simpan tanpa memasukkan teks apa pun, kita juga menampilkan peringatan. Di showAlertWithTitle(_:message:cancelButtonTitle:), kita membuat, mengkonfigurasi, dan menyajikan UIAlertController.

Jalankan aplikasi dan tambahkan beberapa item. Saya yakin kamu setuju bahwa class NSFetchedResultsController membuat proses penambahan item menjadi sangat mudah. Ini mengurus pemantauan konteks objek yang dikelola untuk perubahan dan kita memperbarui antarmuka pengguna, tampilan tabel class ViewController, berdasarkan apa yang instanceNSFetchedResultsController memberitahu kita melalui protokol NSFetchedResultsControllerDelegate.

Kesimpulan

Pada artikel berikutnya, kita akan menyelesaikan aplikasi dengan menambahkan kemampuan untuk menghapus dan memperbarui hal-hal yang harus dilakukan. Sangat penting bahwa kamu memahami konsep yang kita bahas dalam artikel ini. Cara Core Data menyiarkan perubahan keadaan konteks objek yang dikelola sangat penting jadi pastikan kamu memahami ini sebelum melanjutkan.

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.