Indonesian (Bahasa Indonesia) translation by Taufan Prasetyo Basri (you can also view the original English article)
Magical Record, diciptakan oleh Saul Mora, adalah pustaka sumber terbuka yang membuat bekerja dengan Core Data lebih mudah dan lebih elegan. Perpustakaan ini terinspirasi oleh pola rekaman aktif yang juga ditemukan di Ruby on Rails. Tutorial ini akan mengajari Anda cara menggunakan Magical Record di aplikasi Anda sendiri!
Jadi, mengapa Magical Record? Jika Anda sudah mengembangkan untuk iOS atau OS X untuk beberapa waktu, kemungkinan Anda sudah merasakan Core Data. Ini berarti bahwa Anda tahu bahwa itu bisa menjadi sedikit rumit untuk mengatur tumpukan Core Data dan, jujur saja, bekerja dengan Core Data dapat menjadi sedikit rumit terutama karena sintaks verbose nya. Sebagai contoh, mengambil data dari toko persisten cukup verbose terutama bila dibandingkan dengan bagaimana aplikasi Ruby on Rails menangani tugas ini.
Prasyarat
Meskipun Magical Record bekerja dengan Data Inti lebih mudah, itu adalah kunci bahwa Anda memiliki pemahaman yang baik tentang Data Inti jika Anda memutuskan untuk menggunakannya dalam proyek. Terlepas dari namanya, Magical Record tidak melakukan sihir apa pun di belakang layar yang membuat Core Data bekerja secara berbeda. Dengan kata lain, jika Anda mengalami masalah di beberapa titik, sangat penting bahwa Anda memahami bagaimana Core Data bekerja secara internal sehingga Anda dapat memperbaiki masalah yang mungkin muncul di sepanjang jalan.
Persyaratan
Sejak diperkenalkannya Magical Record, persyaratan telah ditingkatkan ke iOS 5.0 (atau lebih tinggi) atau OS X 10.7 (atau lebih tinggi). Juga perlu disebutkan bahwa Magical Record mendukung ARC di luar kotak.
Catatan Magis
Cara terbaik untuk menunjukkan kepada Anda apa yang ditawarkan oleh Magical Record adalah membuat aplikasi yang memanfaatkan perpustakaan hebat ini. Ini akan menunjukkan kepada Anda betapa mudahnya memulai dengan Magical Record dan dengan memulai dari awal ia akan menunjukkan kepada Anda apa yang terlibat dalam pembuatan proyek dengan Core Data dan Magical Record. Aplikasi yang akan kami buat adalah aplikasi pencatatan sederhana di mana pengguna dapat membuat, memperbarui, dan menghapus catatan - kandidat yang baik untuk Data Inti.
Karena Anda telah membaca sejauh ini, saya berasumsi bahwa Anda terbiasa dengan pengembangan iOS dan memiliki pemahaman dasar tentang Core Data. Dalam artikel ini, saya terutama akan fokus pada aspek Data Inti dari aplikasi, yang berarti bahwa saya tidak akan membahas setiap cuplikan kode secara detail.
Langkah 1: Pengaturan Proyek
Mulai dengan membuat proyek baru berdasarkan Templat Aplikasi Tampilan Tunggal (gambar 1) dan beri nama Catatan Magis (gambar 2). Atur keluarga perangkat ke iPhone dan aktifkan ARC dengan menandai kotak centang berlabel Gunakan Penghitungan Referensi Otomatis. Kami tidak akan menggunakan Storyboards atau Tes Unit dalam tutorial ini.






Langkah 2: Tambahkan Rekaman Magis
Karena kami akan menggunakan Data Inti dalam proyek ini, jangan lupa untuk menautkan proyek Anda dengan kerangka Core Data. Karena ini adalah tutorial yang lebih canggih, saya berasumsi bahwa Anda sudah tahu cara melakukan ini.
Menambahkan perpustakaan Catatan Magis ke proyek Anda tidak memerlukan sihir apa pun. Unduh versi terbaru dari GitHub, buka arsip, dan seret folder bernama MagicalRecord ke dalam proyek Xcode Anda. Pastikan juga untuk menyalin isi folder ke dalam proyek Anda dengan mencentang kotak centang berlabel Salin item ke folder grup tujuan (jika diperlukan) dan jangan lupa untuk menambahkan perpustakaan Catatan Magis ke target Catatan Sihir (gambar 3). Pendekatan alternatif untuk menambah catatan ajaib untuk proyek Anda adalah dengan menggunakan CocoaPods.



Untuk menggunakan catatan ajaib dalam kelas Anda, kita perlu mengimpor satu header file, CoreData+MagicalRecord.h. Namun, karena kami akan menggunakan magis catatan cukup dalam tutorial ini jauh lebih mudah untuk memindahkan pernyataan impor ke file Prefix.pch proyek Anda sebagai gantinya. Hal ini akan memastikan bahwa catatan ajaib tersedia di setiap kelas proyek Anda.
Secara default, semua catatan ajaib metode diawali dengan MR_. Anda dapat menghilangkan awalan MR_ dengan menambahkan satu baris tambahan untuk proyek Anda Prefix.pch file, #define MR_SHORTHAND. Penting bahwa Anda tambahkan baris ini sebelum mengimpor file header ajaib catatan.
// // Prefix header for all source files of the 'Magical Notes' target in the 'Magical Notes' project // #import <Availability.h> #ifndef __IPHONE_4_0 #warning "This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #define MR_SHORTHAND #import "CoreData+MagicalRecord.h" #endif
Step 3: Membuat Model Data inti
Sebelum mendirikan tumpukan Data inti, kita perlu membuat model Data inti. Data inti model untuk proyek ini sederhana seperti yang terdiri dari hanya satu entitas bernama catatan. Catatan entity memiliki empat atribut, tanggal, judul, badan, dan kata kunci. Judul, badan, dan kata kunci adalah jenis string, sedangkan tanggal adalah jenis tanggal.
Mulailah dengan membuat model Data inti baru dan nama itu MagicalNotes (gambar 4). Buat entitas catatan dan tambahkan empat atribut seperti diuraikan di atas (gambar 5).






Sebelum kita melanjutkan, kita perlu menciptakan subclass NSManagedObject kustom untuk entitas catatan. Hal ini penting karena catatan ajaib menambah sejumlah berguna kelas metode NSManagedObject kelas, yang akan membuat bekerja dengan entitas catatan lebih mudah karena Anda akan lihat dalam beberapa menit. Pilih catatan entitas dalam model Data inti Anda, membuat file baru, pilih tab Data inti di sebelah kiri, dan pilih opsi subclass NSManagedObject di sebelah kanan (gambar 6).



Step 4: Membuat tumpukan Data inti
Menyiapkan tumpukan Data inti adalah cukup sedikit pekerjaan jika Anda tidak menggunakan salah satu template Xcode disediakan. Dengan magis catatan, namun, hal ini tidak terjadi. Kepala ke aplikasi: didFinishLaunchingWithOptions: metode aplikasi Anda mendelegasikan dan menambahkan potongan kode berikut.
[MagicalRecord setupCoreDataStack];
Thats semua ada untuk itu. Secara default, nama toko yang ajaib catatan menciptakan bagi Anda identik dengan nama aplikasi Anda. Namun, Anda dapat menyesuaikan nama toko dengan menerapkan setupCoreDataStackWithStoreNamed: sebaliknya dan melewati nama toko.
Di belakang layar, catatan ajaib akan instantiate konteks dikelola objek pada benang serta Koordinator toko gigih dan dikelola objek model. Bagaimana magis adalah bahwa?
Penebangan: Kemampuan untuk log Data inti pesan dan kesalahan ke konsol dibangun dalam catatan ajaib. Lihatlah konsol setelah membangun dan menjalankan aplikasi Anda untuk pertama kalinya. Log di konsol tunjukkan persis apa catatan ajaib lakukan di belakang layar.
Langkah 5: Meletakkan dasar
Sebelum kita dapat mulai membuat catatan baru, pertama kita perlu beberapa pekerjaan kasar. Kembali Anda mendelegasikan aplikasi aplikasi: didFinishLaunchingWithOptions: metode dan menginisialisasi pengontrol navigasi dengan controller tampilan utama sebagai nya akar Lihat controller. Lihatlah pelaksanaan lengkap aplikasi: didFinishLaunchingWithOptions:.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Setup Core Data Stack [MagicalRecord setupCoreDataStack]; // Initialize View Controller self.viewController = [[MTViewController alloc] initWithNibName:@"MTViewController" bundle:nil]; // Initialize Navigation Controller UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:self.viewController]; // Initialize Window self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.window setRootViewController:nc]; [self.window makeKeyAndVisible]; return YES; }
Kita akan menampilkan catatan dalam tabel lihat jadi mulai dengan menambahkan outlet untuk tampilan tabel di file header controller tampilan utama. Pilih tampilan utama controller XIB file dan seret sebuah instance UITableView dalam tampilan Lihat controller. Jangan lupa untuk menetapkan pemilik File sebagai tampilan tabel dataSource dan mendelegasikan. Juga, pastikan untuk menghubungkan File pemilik tabel Lihat outlet dengan tampilan tabel yang kami hanya menambahkan ke pemandangan.
#import <UIKit/UIKit.h> @interface MTViewController : UIViewController @property (nonatomic, weak) IBOutlet UITableView *tableView; @end
Dalam tampilan utama controller implementasi file, tambahkan properti pribadi bernama catatan untuk kelas ekstensi di bagian atas. Pastikan properti adalah jenis NSMutableArray. Catatan properti akan menyimpan catatan bahwa kita mengambil dari penyimpanan data dan akan berfungsi sebagai sumber data tampilan tabel.
#import "MTViewController.h" @interface MTViewController () @property (nonatomic, strong) NSMutableArray *notes; @end
Dalam tampilan controller viewDidLoad metode, kami mengatur tampilan dengan menelepon setupView pada controller tampilan utama. Ini adalah tidak lebih dari sebuah metode penolong untuk menjaga metode viewDidLoad yang ringkas dan rapi. Dalam setupView, kita menambahkan mengedit dan menambahkan tombol ke bar navigasi dan kita mengambil catatan dari penyimpanan data dengan menerapkan metode fetchNotes.
- (void)viewDidLoad { [super viewDidLoad]; // Setup View [self setupView]; }
- (void)setupView { // Create Edit Button UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(editNotes:)]; self.navigationItem.leftBarButtonItem = editButton; // Create Add Button UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStyleBordered target:self action:@selector(addNote:)]; self.navigationItem.rightBarButtonItem = addButton; // Fetch Notes [self fetchNotes]; }
Mungkin mengejutkan Anda bahwa metode fetchNotes adalah hanya satu baris kode. Ini adalah semua berkat catatan ajaib. Mengambil catatan dari data store yang sederhana seperti memanggil findAll catatan kelas. Metode tersebut mengembalikan array catatan seperti yang Anda harapkan. Jangan lupa impor file header kelas catatan di bagian atas dari file pelaksanaan tampilan utama controller.
- (void)fetchNotes { // Fetch Notes self.notes = [NSMutableArray arrayWithArray:[Note findAll]]; }
Penyortiran catatan mudah dan elegan. Lupa semacam deskriptor dan Lihatlah Diperbarui pelaksanaan metode fetchNotes di bawah ini.
- (void)fetchNotes { // Fetch Notes self.notes = [NSMutableArray arrayWithArray:[Note findAllSortedBy:@"date" ascending:YES]]; }
EditNotes: metode ini sederhana. Semua yang kita lakukan adalah beralih gaya mengedit tampilan tabel. Yang harus cukup untuk saat ini.
- (void)editNotes:(id)sender { [self.tableView setEditing:![self.tableView isEditing] animated:YES]; }
AddNote: metode tetap kosong untuk saat ini.
- (void)addNote:(id)sender { }
Sebelum membangun dan menjalankan aplikasi Anda, kita perlu untuk mengimplementasikan metode protokol sumber data tampilan tabel yang diperlukan. Jika Anda sudah familiar dengan iOS pengembangan, ini tidak boleh terlalu sulit. Lihatlah implementasi berbagai metode di bawah ini untuk penjelasan.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.notes count]; }
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; // Configure Cell [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; } // Fetch Note Note *note = [self.notes objectAtIndex:[indexPath row]]; // Configure Cell [cell.textLabel setText:[note title]]; [cell.detailTextLabel setText:[note keywords]]; return cell; }
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES; }
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { } }
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; }
Membangun dan menjalankan aplikasi Anda.
Langkah 6: Membuat catatan
Bila pengguna menyentuh tombol add, pandangan modal harus muncul memungkinkan pengguna untuk menambahkan catatan baru untuk penyimpanan data. Menciptakan subclass UIViewController baru dan nama itu MTEditNoteViewController. Seperti namanya menunjukkan, kami juga akan menggunakan controller pandangan ini untuk mengedit catatan.



Sebelum menuju ke tampilan controller XIB file, menambah tiga outlet file header Lihat controller. Pertama dua outlet adalah contoh dari UITextField untuk judul dan kata kunci dari catatan. Outlet ketiga adalah instance dari UITextView untuk tubuh catatan.
#import <UIKit/UIKit.h> @interface MTEditNoteViewController : UIViewController @property (nonatomic, weak) IBOutlet UITextField *titleField; @property (nonatomic, weak) IBOutlet UITextField *keywordsField; @property (nonatomic, weak) IBOutlet UITextView *bodyView; @end
Menciptakan antarmuka pengguna mengedit catatan Lihat controller tidak boleh terlalu banyak tantangan. Menambahkan dua contoh UITextField dan satu contoh UITextView ke tampilan Lihat controller. Mengkonfigurasi bidang teks yang Anda inginkan, misalnya, dengan memberikan mereka placeholder teks. Jangan lupa untuk menghubungkan File pemilik outlet dengan bidang teks dan tampilan teks.



Karena kami akan menggunakan MTEditNoteViewController kelas untuk menambahkan dan mengedit catatan, sangat penting bahwa kita tahu apa negara (menambahkan atau mengedit) Lihat controller adalah di setiap saat. Ada beberapa cara untuk memecahkan masalah ini. Salah satu cara adalah dengan menambahkan sebuah catatan pribadi properti untuk view controller, yang adalah nol jika catatan baru dibuat dan yang diatur selama inisialisasi ketika catatan sedang sedang diedit. Dalam situasi seperti ini, saya lebih suka bekerja dengan initializers khusus untuk menghindari kebingungan dan ini juga apa yang memungkinkan saya untuk menjaga catatan properti pribadi. Selain catatan pribadi properti, kita juga menambahkan properti pribadi kedua bernama isEditing, boolean. Alasan untuk ini akan menjadi jelas dalam beberapa menit. Juga, jangan lupa untuk impor file header catatan kelas.
#import "MTEditNoteViewController.h" #import "Note.h" @interface MTEditNoteViewController () @property (nonatomic, strong) Note *note; @property (nonatomic, assign) BOOL isEditing; @end
Mari kita pergi melalui berbagai metode langkah demi langkah. Pertama, kami ingin memastikan bahwa kita dapat menambahkan catatan baru untuk penyimpanan data tanpa masalah. Kita mulai dengan initWithNibName:bundle: metode. Satu-satunya perubahan yang kita buat adalah mengatur properti isEditing No.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Set Flag self.isEditing = NO; } return self; }
Seperti yang kita lihat sebelumnya, dalam metode viewDidLoad, kami mengatur tampilan dengan menerapkan metode setupView di mana kita membuat Batalkan dan Simpan tombol. Perhatikan bahwa kita hanya membuat tombol cancel jika properti catatan sama ke nol. Alasannya adalah bahwa kita sekarang Lihat controller modally saat menambahkan catatan baru, tetapi kami mendorong controller pemandangan ke tumpukan navigasi ketika kita mengedit catatan. Jika catatan properti adalah tidak sama dengan nol, kami juga mengisi bidang teks dan tampilan teks dengan isi catatan properti.
- (void)viewDidLoad { [super viewDidLoad]; // Setup View [self setupView]; }
- (void)setupView { // Create Cancel Button if (!self.note) { UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancel:)]; self.navigationItem.leftBarButtonItem = cancelButton; } // Create Save Button UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStyleBordered target:self action:@selector(save:)]; self.navigationItem.rightBarButtonItem = saveButton; if (self.note) { // Populate Form Fields [self.titleField setText:[self.note title]]; [self.keywordsField setText:[self.note keywords]]; [self.bodyView setText:[self.note body]]; } }
Batalkan: metode tidak boleh menahan kejutan.
- (void)cancel:(id)sender { // Dismiss View Controller [self dismissViewControllerAnimated:YES completion:nil]; }
Simpan: metode sedikit lebih verbose, tetapi tidak boleh terlalu sulit baik. Kami pertama Periksa apakah pemandangan controller catatan properti terletak. Jika sudah diatur maka kita tahu bahwa catatan sedang sedang diedit, tidak diciptakan. Jika properti catatan sama dengan nol kemudian kita tahu bahwa catatan baru harus dibuat. Mengabaikan Lihat controller sedikit rumit karena kita perlu mengabaikan controller Lihat jika itu disajikan modally ketika catatan diciptakan dan pop dari tumpukan navigasi ketika catatan yang telah diedit. Itulah sebabnya kami membuat properti isEditing.
- (void)save:(id)sender { if (!self.note) { // Create Note self.note = [Note createEntity]; // Configure Note [self.note setDate:[NSDate date]]; } // Configure Note [self.note setTitle:[self.titleField text]]; [self.note setKeywords:[self.keywordsField text]]; [self.note setBody:[self.bodyView text]]; // Save Managed Object Context [[NSManagedObjectContext defaultContext] saveNestedContexts]; if (self.isEditing) { // Pop View Controller from Navigation Stack [self.navigationController popViewControllerAnimated:YES]; } else { // Dismiss View Controller [self dismissViewControllerAnimated:YES completion:nil]; } }
Seperti yang Anda lihat, membuat catatan baru adalah satu-kapal lain dengan menggunakan catatan ajaib. Kami mengisi catatan dengan isi form isian dan menyelamatkan konteks dikelola objek catatan. Mengambil referensi ke konteks dikelola objek menjadi mudah dengan catatan ajaib. Kita perlu lakukan adalah meminta NSManagedObjectContext kelas untuk konteks default. Menyimpan konteks identik dengan menyimpan konteks tanpa catatan ajaib. Meskipun kami log kesalahan jika sesuatu yang tidak beres, ini tidak benar-benar diperlukan karena catatan ajaib akan log kesalahan untuk konsol untuk kita.
Sekarang saatnya untuk mengubah addNote: metode dalam tampilan utama controller. Jangan lupa untuk impor file header kelas MTEditNoteViewController.
- (void)addNote:(id)sender { // Initialize Edit Note View Controller MTEditNoteViewController *vc = [[MTEditNoteViewController alloc] initWithNibName:@"MTEditNoteViewController" bundle:[NSBundle mainBundle]]; // Initialize Navigation Controller UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc]; // Present View Controller [self.navigationController presentViewController:nc animated:YES completion:nil]; }
Setiap kali catatan baru ditambahkan ke penyimpanan data, kita harus memperbarui tampilan tabel untuk menampilkan perubahan. Untuk aplikasi produksi, pendekatan yang lebih baik akan mengamati perubahan dalam konteks dikelola objek. Namun, dalam aplikasi contoh ini, kita mengambil catatan dari penyimpanan data dan reload tampilan tabel setiap kali muncul tampilan utama (kembali). Ini mahal dan karena itu tidak dianjurkan jika Anda berencana untuk mengirimkan aplikasi Anda ke App Store. Untuk situasi seperti ini, terlalu hasil controller adalah solusi yang sempurna.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Fetch Notes [self fetchNotes]; // Reload Table View [self.tableView reloadData]; }
Langkah 7: Memperbarui catatan
Memperbarui catatan hampir semudah menambahkan catatan. Seperti yang saya sebutkan sebelumnya, kita akan menciptakan initializer khusus untuk mengatur tampilan controller catatan properti. Memperbarui file header kelas MTEditNoteViewController dengan menambahkan initializer baru seperti yang ditunjukkan di bawah ini. Jangan lupa untuk juga menambahkan pernyataan maju kelas untuk kelas catatan ke header file.
#import <UIKit/UIKit.h> @class Note; @interface MTEditNoteViewController : UIViewController @property (nonatomic, weak) IBOutlet UITextField *titleField; @property (nonatomic, weak) IBOutlet UITextField *keywordsField; @property (nonatomic, weak) IBOutlet UITextView *bodyView; - (id)initWithNote:(Note *)note; @end
Initializer khusus tidak benar-benar khusus. Semua yang kita lakukan adalah mengatur tampilan controller catatan dan isEditing properti seperti yang Anda lihat di bawah.
- (id)initWithNote:(Note *)note { self = [self initWithNibName:@"MTEditNoteViewController" bundle:[NSBundle mainBundle]]; if (self) { // Set Note self.note = note; // Set Flag self.isEditing = YES; } return self; }
Sebelum kami membangun dan menjalankan aplikasi satu kali lagi, kita perlu memperbarui tampilan utama controller tableView:didSelectRowAtIndexPath: metode. Dalam metode ini, kita mengambil catatan benar, menginisialisasi instance kelas MTEditNoteViewController, dan mendorong controller pemandangan ke tumpukan navigasi.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; // Fetch Note Note *note = [self.notes objectAtIndex:[indexPath row]]; // Initialize Edit Note View Controller MTEditNoteViewController *vc = [[MTEditNoteViewController alloc] initWithNote:note]; // Push View Controller onto Navigation Stack [self.navigationController pushViewController:vc animated:YES]; }
Langkah 8: Menghapus catatan
Untuk menghapus catatan, kita perlu mengubah tableView:commitEditingStyle:forRowAtIndexPath: metode. Kami mengambil catatan, menghapusnya dari sumber data dan konteks dikelola objek, dan memperbarui tampilan tabel. Seperti yang Anda lihat, menghapus catatan atau entitas dari penyimpanan data yang sederhana seperti mengirim pesan deleteEntity.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { // Fetch Note Note *note = [self.notes objectAtIndex:[indexPath row]]; // Delete Note from Data Source [self.notes removeObjectAtIndex:[indexPath row]]; // Delete Entity [note deleteEntity]; // Update Table View [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } }
Menggaruk permukaan
Dengan membangun catatan ajaib, kita hanya menggores permukaan. Saya ingin menekankan bahwa catatan ajaib adalah sebuah perpustakaan yang kuat, matang dan bukan hanya sebuah penggabungan dari beberapa kategori yang berguna. Seperti yang saya tunjukkan kepada Anda, catatan ajaib membuat bekerja dengan Data inti jauh lebih mudah dan lebih verbose. Tugas umum yang sering satu kalimat. Bandingkan kode snippets untuk mengambil semua catatan dan Urutkan mereka tanggal. Menggunakan Data inti ini akan menghasilkan kode snippet berikut.
NSFetchRequest *fr = [[NSFetchRequest alloc] init]; NSEntityDescription *ed = [NSEntityDescription entityForName:@"Note" inManagedObjectContext:[NSManagedObjectContext defaultContext]]; [fr setEntity:ed]; NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]; [fr setSortDescriptors:@[sd]]; NSError *error = nil; NSArray *result = [[NSManagedObjectContext defaultContext] executeFetchRequest:fr error:&error];
Menggunakan magis catatan, namun, ini hanya membutuhkan satu baris kode.
NSArray *result = [Note findAllSortedBy:@"date" ascending:YES];
Jika kita menambahkan kemampuan untuk mencari daftar catatan, satu pendekatan - meskipun tidak ideal - akan mencari penyimpanan data untuk semua catatan dengan judul atau kata kunci yang terkandung query. Menggunakan catatan ajaib ini akan mengakibatkan pelaksanaan berikut.
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"title contains[cd] %@", query]; NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"keywords contains[cd] %@", query]; NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate1, predicate2]]; NSArray *result = [Note findAllWithPredicate:predicate];
Kesimpulan
Seperti saya katakan, catatan ajaib memiliki lebih daripada apa yang saya telah menunjukkan Anda dalam tutorial ini menawarkan banyak. Sejak versi 2.0, catatan ajaib dapat menangani bersarang konteks dan juga menyediakan dukungan untuk iCloud dan ulir operasi. Tujuan utama dari tutorial ini adalah untuk menunjukkan bahwa Data inti tidak harus rumit dan Saul Mora menggambarkan hal ini dengan catatan ajaib.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly