Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK

iPhone Core Data: langkah pertama Anda

by
Read Time:15 minsLanguages:

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

Core Data adalah Framework Apple memberikan kepada pengembang yang digambarkan sebagai "skema berbasis grafik manajemen dan persistence Framework." Apa sebenarnya artinya? Framework mengelola dimana data disimpan, bagaimana disimpan, data caching, dan manajemen memori. Itu porting ke iPhone dari Mac OS X dengan 3,0 iPhone SDK rilis.

Dalam tutorial ini saya akan memandu Anda melalui proses pembuatan sebuah proyek dengan Core Data dan menunjukkan kepada Anda bagaimana untuk menggunakannya dengan UITableViewController sederhana. Ini akan menjadi satu tabel database yang sederhana yang akan menyimpan putaran dan menampilkan waktu dan perbedaan split UITableView.

Mengapa menggunakan Core Data?

Sebelum kita mulai, penting untuk memahami mengapa Anda mungkin ingin menggunakan Core Data dengan SQLite untuk penyimpanan atas daftar properti, custom XML format, atau langsung akses database SQLite. Core Data API memungkinkan pengembang untuk membuat dan menggunakan database relasional, melakukan validasi record, dan melakukan query menggunakan SQL-less kondisi. Pada dasarnya memungkinkan Anda untuk berinteraksi dengan SQLite di Objective-C dan tidak perlu khawatir tentang koneksi atau mengelola skema database, dan sebagian dari fitur ini akrab bagi orang yang telah menggunakan teknologi object-relational mapping (ORM) seperti yang ada di Ruby on Rails, CakePHP, LINQ atau Perpustakaan dan framework yang abstrak akses ke database. Manfaat utama pendekatan ini adalah bahwa hal itu menghilangkan waktu pengembangan jika tidak perlu menulis query SQL yang kompleks dan secara manual menangani SQL dan output dari operasi mereka.

Menciptakan iPhone proyek baru dengan Core Data

Contoh aplikasi kita akan membangun hari ini adalah sebuah lap timer. Ini akan menciptakan rekor baru di core data sotore untuk masing-masing putaran yang kita buat. UITableView kemudian akan menunjukkan perbedaan antara saat ini dan lap terakhir.

core data lap timer final previewcore data lap timer final previewcore data lap timer final preview

Untuk memulai kami akan membuka XCode dan buat proyek baru. Sebut saja apa yang Anda inginkan, saya menamakannya "LapTimer". Kita akan menciptakan sebuah "Window-based application" dari proyek New Project pilihan. Pastikan "Use Core Data for Storage" dicentang.

new core data project screennew core data project screennew core data project screen

Proyek harus akrab bagi Anda yang mungkin telah melihat sebelum jika Anda telah mengembangkan aplikasi iPhone sebelumnya.

Setup Core Data Struktur

Tidak ada banyak pengaturan untuk melakukan seperti opsi "Use Core Data for Storage" dalam "Window-based Application" template secara otomatis telah menetapkan beberapa variabel penting dan menciptakan file dalam proyek bagi kita.

LapTimer.xcdatamodel file adalah dimana kita akan mendefinisikan skema database SQLite kami. Framework Core Data juga ditambahkan ke proyek untuk menyertakan file untuk akses API. Perubahan lain yang dibuat dalam default file aplikasi. Terutama, aplikasi delegasi file memiliki metode untuk men-setup Core Data Store dalam aplikasi kita dan referensi dengan child UIViewControllers.

Apa yang kami tertarik saat ini adalah LapTimer.xcdatamodel file di bawah "Resources." File ini memberi Anda peta visual skema menampilkan entitas dan atribut.

Ada beberapa istilah yang berbeda dan frasa yang digunakan dalam Core Data yang bisa tidak terlalu bebas daripada nama database regular, tetapi mereka tidak identik.

"Entitas", juga dikenal sebagai "managed object", ini mirip dengan sebuah tabel. Ini adalah definisi dari objek yang akan berisi kumpulan data. Objek entitas berisi "atribut." Ini dapat menjadi bebas mengasosiasikan dengan kolom, tetapi atribut ini tidak hanya terbatas untuk penyimpanan data. Atribut dapat mendefinisikan sebuah hubungan antara dua entitas, sebuah properti secara dinamis, atau mendefinisikan sebuah properti untuk penyimpanan data.

iphone core data diagramiphone core data diagramiphone core data diagram

Dari diagram di atas, Anda bisa mendapatkan rasa bagaimana fleksibel objek yang berasal dari Core Data entitas. Untuk aplikasi contoh ini kita akan membutuhkan sebuah entitas yang benar-benar sederhana. Kita akan memanggil entitas "Event" yang akan menyimpan catatan dari putaran kami.

iphone core data modeliphone core data modeliphone core data model

Apa yang akan kita lakukan untuk membuat entitas ini adalah klik [+] tombol di atas pertama (dari kiri) kolom. Ini akan membuat sebuah entitas baru dalam daftar dan visual di peta skema di bawah kolom.

iphone core data managed objectiphone core data managed objectiphone core data managed object

Ini adalah editor visual yang bagus untuk model Anda. Data Core benar-benar melakukannya ketidak datang ke bagian "M" (Model) MVC. Visual editor menunjukkan hubungan, sifat dan entitas store sementara skema dinamis dibuat dan dikelola semua untuk Anda. Hal ini mirip dengan Interface Builder sebagai dibutuhkan perawatan mengalokasikan, mengelola dan objek yang menempatkan Anda pada UIView tanpa satu baris kode.

Dengan entitas event baru di tempat, kita ingin membuat "properti." Karena ini akan menyimpan data kami akan mengaturnya sebagai "atribut." Begitu atribut baru ini hanya akan menyimpan tanggal saat ini ketika record itu dibuat. Dalam contoh aplikasi kita kita akan menggunakan ini untuk referensi putaran.

Kolom berikutnya ke kanan yang mana kita mendefinisikan properti kami (pastikan entitas event yang dipilih). Jadi, membuat properti baru menggunakan [+] tombol di kolom, pilih "Add Attribute".

iphone core data attributesiphone core data attributesiphone core data attributes

Kita akan memanggil atribut ini "timeStamp" dan menetapkan jenis "Date". Dalam jenis drop down Pilih kolom yang serupa dengan tipe data yang tersedia dalam sistem database relasional seperti PostgreSQL atau MySQL, termasuk tipe data seperti bilangan integer, float, string, Boolean, date, dan data biner (blob).

Untuk atribut ini, kita tidak perlu pilihan lain dipilih atau dubah.

Hanya itu untuk xcdatamodel file, dan kita dapat bergerak ke mengintegrasikannya ke dalam aplikasi kami. Sekarang adalah waktu yang baik untuk menyimpan pekerjaan Anda.

Membuat file model kami

Jika Anda telah menggunakan Framework MVC yang memiliki definisi model database yang mendefinisikan struktur tabel atau perilaku, maka ini akan menjadi sebuah tugas yang familiar.

Kita perlu untuk memulai dengan menciptakan definisi entitas. Kami melakukan ini dengan menciptakan class NSManagedObject dari entitas dan menetapkan variabel store yang dimiliki.

Ini adalah proses yang sederhana. Pilih entitas Evebt di LapTimer.xcdatamodel file dan pergi File > New File. Anda akan melihat bahwa ada template file baru di bagian "Cocoa Touch Clas" yang disebut "Managed Object Class".

new managed object classnew managed object classnew managed object class

Pilih template dan tekan "Next" Layar berikutnya hanya mendefinisikan dimana kita menyimpan file dan target untuk memasukkannya dengan, ini semua benar secara default sehingga tekan "Next" lagi. Layar berikutnya adalah dimana Anda menentukan entitas apa yang Anda ingin membuat class NSManagedObject. Jika tidak dipilih, pilih event dan yakinkan "Genereate Accessors" dan "Generate Obj-C 2.0 properties" checkbox yang dipilih, kami tidak perlu validasi pada saat ini. Tekan Finish.

managed object class generationmanaged object class generationmanaged object class generation

Jadi sekarang kita memiliki 2 file baru di aplikasi kita. Event.m dan Event.h. Mereka menentukan class NSManagedObject untuk entitas evebt yang kita buat di Core Data Store kami. Mereka menetapkan bidang timeStamp sehingga ketika kita ingin menggunakan class Event kita dapat mengakses atribut.

Event.h

Event.m

Seperti model definisi dalam Framework dan bahasa lainnya Anda dapat menambahkan metode kustom untuk semua record event entitas. Anda akan melihat atribut timeStamp telah ditambahkan dan ditetapkan sebagai objek NSDate.

Core Data dan KVC

Dengan Core Data sudah di setup sekarang saatnya untuk bekerja pada beberapa kontroler logika dalam aplikasi. Kita akan menggunakan UITableViewController sebagai interface utama dari aplikasi untuk menunjukkan waktu putaran sebagai logging waktu baru.

Jadi, kita akan menciptakan UITableViewController baru dengan File > New File. Kemudian di bawah bagian iPhone pilih "UIViewController subclass" dan cek "UITableViewController subclass" tetapi tidak cek yang berhubungan dengan menggunakan XIB's atau untuk menargetkan untuk iPad. Kami tidak akan menggunakan XIB untuk controller ini. namai file yang baru "TimeTableController" dan menyelesaikan file wizard.

Dalam controller ini, kita akan membutuhkan 2 properti, sebagai referensi untuk NSManagedObjectContext dan array untuk menyimpan record dalam untuk UITableView. Juga mendefinisikan properti-properti, kita akan mengimpor berkas Event.h sehingga kita dapat menggunakan class.

TimeTableController.h

Apa itu NSManagedObjectContext? Itu disebut sebagai "scratch pad" untuk Core Data dalam aplikasi untuk mengelola mengambil, memperbarui, dan membuat record di store. Itu juga mengelola beberapa fitur dasar dalam Core Data termasuk validasi dan pengelolaan undo/redo record.

managed object context adalah hubungan antara kode dan penyimpanan data. Semua operasi Anda akan mengeksekusi untuk Core Data melakukannya terhadap managed object context Ketika permintaan dilakukan, managed object context akan kemudian berbicara kepada Koordinator persistent store yang bertanggung jawab untuk pemetaan objek data untuk penyimpanan data. Hal ini memungkinkan Core Data yang fleksibel antara format data yang berbeda store. Berikut ini adalah diagram bagaimana ini terlihat.

iphone core data diagram 2

Dengan file header didefinisikan kita perlu untuk menyebarkan dialokasikan properti dan metode dalam file implementasi.

TimeTableController.m

Itu sedikit kode yang adil jadi mari kita pergi melalui itu dengan metode masing-masing secara individual. Ada kode dari ketika Anda membuat file dari template, buang komenter metode seperti viewDidUnload, yang saya baru saja tinggalkan dari atas.

viewDidLoad

Kita mulai dengan panggilan biasa ke class super. Kemudian kita mendefinisikan UINavigationBar judul. Setelah itu kita perlu mendefinisikan tombol kita akan gunakan untuk menambahkan data ke Core Data Store. Ketika tombol ditekan kita mengatakan itu untuk memanggil addTime selector: yang kemudian akan berinteraksi dengan Core Data. Setelah rilis dibutuhkan kita bisa memanggil fungsi fetchRecords yang dijelaskan di bawah ini.

addTime: (id)pengirim

Ini adalah dijalankan ketika UIBarButtonItem di bagian kanan atas UINavigationBar ditekan. Kita perlu membuat record event baru dengan NSDate saat ini dan Simpan ke database.

Kami menciptakan rekor event baru yang disebut NSEntityDescription. Ini adalah baris Anda dalam database untuk record baru. Untuk melakukan hal ini kita mendefinisikan nama entitas record milik dan menyediakan NSManagedObjectContext. Tanggal ini kemudian ditetapkan terhadap atribut timeStamp.

Simpan operasi kemudian dilakukan, tetapi ada ketentuan untuk menangani kesalahan jika insert gagal. Anda biasanya akan melempar UIAlertView mengatakan record tidak menciptakan, dan mungkin menginstruksikan pengguna untuk mencoba lagi atau menutup dan membuka kembali aplikasi.

Record perlu ditambahkan ke array UITableView feed dari. Kemudian UITableView perlu diberitahu untuk reload data. Anda dapat melakukan ini secara lebih jelas dengan animasi tapi demi tutorial, mari kita tetap sederhana.

fetchData

Metode ini akan mendapatkan data dari store dan menambahkannya ke array yang kita miliki dalam controller. Untuk detail lebih lanjut tentang cara mendapatkan record Mari kita telah lihat dari dekat NSFetchRequest.

Pengambilan data dari data store

Core Data memiliki pendekatan yang berbeda untuk pengambilan data dari database-nya. Ini adalah data store NoSQL, yang berarti semua kondisi query yang berdasarkan metode. Ini besar seperti base store, yang merupakan SQLite, dapat diubah untuk teknologi database lain dan satu-satunya untuk mengubah akan sambungan dan driver untuk database.

Jadi, untuk buat permintaan kita membuat sebuah objek NSFetchRequest. Ini adalah objek dasar yang dimana kondisi query akan ditetapkan. Kita dapat menentukan kondisi untuk pencocokan properti tertentu berdasarkan bagaimana record diperintahkan. Anda dapat mengetahui lebih lanjut tentang Core Data dan kondisi untuk NSFetchRequests dalam dokumentasi mereka.

Membuat permintaan NSFetch baru yang sederhana. Anda hanya perlu menentukan Anda ingin record dari entitas dan NSManagedObjectContext.

Entitas didefinisikan menggunakan objek NSEntityDescription yang memerlukan nama entitas dan NSManagedObjectContext. Permintaan fetch kemudian dibuat melewati Deskripsi entitas. Hal ini akan sama untuk bagian pertama dari pernyataan SQL:

Dalam aplikasi contoh kita kita mengurutkan data dengan timeStamp secara descending. Untuk melakukan ini, kita menggunakan NSSortDescriptor.

NSSortDescriptor dibuat dan kita mendefinisikan atribut kami berharap untuk menyortir dan cuaca itu ascending, dalam kasus ini kita ingin descending sehingga diatur ke NO. Permintaan fetch dapat mengambil banyak semacam deskriptor sehingga menerima array bila pengaturan semacam deskriptor. Karena kami hanya ingin satu, kita hanya perlu membuat sebuah array dengan satu objek di dalamnya. Kami menetapkan array Deskripsi terhadap permintaan fetch dan yang itu.

Untuk menentukan kondisi untuk mencocokkan isi record NSPredicate class datang ke dalam dan bermain. Hal ini memungkinkan mengambil permintaan menbandingkan atau menentukan rentang yang isi record yang harus dipenuhi. Ini adalah setara dengan Anda sama, lebih besar dan kurang dari pertandingan di SQL. Ini memiliki lebih dari fungsi dasar SQL, yang dapat Anda lihat di sini.

Menetapkan sebuah predikat bisa sangat sederhana.

Menggunakan NSPredicate predicateWithFormat: adalah metode yang sederhana dan akrab yang memungkinkan Anda untuk menentukan kondisi query. Untuk penjelasan yang mendalam tentang NSPredicates dokumentasi Apple memiliki beberapa panduan yang bagus.

Ketika Anda sudah tetapkan kondisi dalam permintaan fetch Anda Anda kemudian dapat menjalankannya.

Yang akan mengembalikan array obyek entitas, NSManagedObjects, untuk digunakan dalam output data Anda.

Mempopulasikan UITableView dari Core Data

Dengan data yang diambil dari Core Data dan disimpan di eventArray kami sekarang dapat output record ke UITableView.

Hal pertama adalah untuk memberitahu table bahwa kita akan hanya memerlukan 1 bagian dan berapa banyak baris kita harus gunakan.

Kutipan dari TimeTableController.m

Jika Anda telah menggunakan UITableViewController sebelum, fungsi berikutnya harusnya mudah dipahami.

Sel akan menampilkan 2 nilai, dari menggunakan style UITableViewCellStyleValue1. Kiri akan menjadi waktu putaran dan dikanan akan menjadi perbedaan dalam detik dari rekor sebelumnya.

Karena metode ini iterasi kita perlu berhati-hati dengan muat dapat menempatkan perangkat di bawah jika itu tidak dikelola dengan benar. Untuk alasan itu NSDatFormatter disimpan sebagai variabel statis sehingga dia dapat digunakan kembali dalam setiap iterasi tanpa mengalokasikan dan melepaskannya setiap waktu.

Lazy Loading

Malas Loading adalah teknik di mana Anda menunda permintaan atau alokasi properti sebanyak mungkin. Ini membantu menjaga memori turun dan selama berulang-ulang fungsi ini penting. Mengetahui kapan dan bagaimana cara mengalokasikan data sangat penting untuk menjaga aplikasi mobile yang cepat. Deallocating objek ini juga sebagai penting, awal yang lebih baik.

cellForRowAtIndexPath: metode yang berulang-ulang dan data diproses atau dialokasikan dalam metode terutama perlu tetep minimal. Metode ini dijalankan setiap kali sel datang ke tampilan sehingga ketika pengguna scroll cepat metode khusus ini, tergantung pada ukuran mengatur record, sangat sering dapat dipanggil berturut-turut.

Tugas berikutnya adalah untuk mendapatkan objek event terkait dengan baris tabel yang perlu diberikan. Karena kita perlu mendapatkan record sebelumnya untuk perbandingan waktu ada pemeriksaan sederhana untuk melihat apakah ada record sebelumnya dan menyimpannya ke previousEvent. Jika previousEvent ada maka kita menghitung split menggunakan [NSDate timeIntervalSinceDate: (NSDate)]. TextLabel dan detailedTextLabel kemudian ditetapkan dengan nilai-nilai yang kita telah hitung.

Menyelesaikan aplikasi

Dengan UITableViewController setup dan tabel data source bekerja dengan Core Data store semua yang diperlukan adalah untuk me-load controller saat aplikasi dimulai.

Dalam Application controller properti UINavigationController yang perlu didefinisikan. Kemudian applicationDidFinishLaunching metode hanya perlu mengalokasikan controller dan kami selesai.

LapTimerAppDelegate.h

Kutipan dari LapTimerAppDelegate.m

TimeTableController.h file dimasukkan ke dalam aplikasi delegasi dan kemudian dialokasikan dengan UINavigationController.

Itu harus seperti itu. Build aplikasi untuk memeriksa kesalahan. Beberapa contoh kode telah diekstrak, tidak ada kode yang dihasilkan ketika membuat file telah dihapus, hanya diisi. Jika Anda mengalami kesalahan Anda tidak akan pecah  , Anda dapat men-download file proyek melekat tutorial ini yang Anda dapat kemudian menyusun dan membandingkan.

Jalankan aplikasi. Anda akan melihat navigation controller dan tombol add. Tekan tombol add dan Anda akan mendapatkan waktu baru dalam tabel.

Rekap

Dalam tutorial ini kami telah membuat contoh aplikasi untuk menyimpan data sederhana ke Core Data Sttore. Aplikasi berlari melalui prosedur konfigurasi awal ketika membuat aplikasi dengan Core Data, mendefinisikan struktur data dan mengambil record dari Store Data.

Mudah-mudahan Anda mendapatkan pengenalan Core Data dan dapat melihat betapa mudahnya untuk menggunakan dan bagaimana hal itu dapat meningkatkan kinerja aplikasi dan fungsi.

Jika Anda ingin mengetahui lebih lanjut tentang Core Data atau ingin rinci terlihat pada Framework struktur maka dokumentasi pengembang Apple adalah tempat yang sempurna untuk pergi.

Resource

Dokumentasi pengembang Apple:

Pengenalan Pemrograman Core Data

Core Data migrasi dan versi

NSPredicate panduan pemrograman:

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