iOS
...
Data Objects
Panduan CRUD Parse Object di iOS untuk Pengembang
17 mnt
crud parse objek di ios pendahuluan menyimpan data di parse dibangun di sekitar parse object parse object kelas setiap parse object parse object berisi pasangan kunci nilai dari data yang kompatibel dengan json data ini tidak memiliki skema, yang berarti anda tidak perlu menentukan sebelumnya kunci apa yang ada di setiap parse object parse object anda dapat dengan mudah mengatur pasangan kunci nilai apa pun yang anda inginkan, dan backend kami akan menyimpannya anda juga dapat menentukan tipe data sesuai dengan kebutuhan aplikasi anda dan menyimpan tipe seperti number number , boolean boolean , string string , datetime datetime , list list , geopointers geopointers , dan object object , mengkodekannya ke json sebelum menyimpan parse juga mendukung penyimpanan dan kueri data relasional dengan menggunakan tipe pointers pointers dan relations relations dalam panduan ini, anda akan belajar bagaimana melakukan operasi data dasar melalui aplikasi contoh crud (aplikasi daftar todo), yang akan menunjukkan kepada anda bagaimana cara membuat, membaca, memperbarui, dan menghapus data dari database server parse anda menggunakan parseswift sdk parseswift sdk tutorial ini menggunakan aplikasi dasar yang dibuat di xcode 12 dan ios 14 kapan saja, anda dapat mengakses proyek lengkap melalui repositori github kami https //github com/templates back4app/ios crud to do list tujuan untuk belajar bagaimana melakukan operasi database dasar di back4app menggunakan aplikasi daftar todo sebagai contoh prasyarat untuk menyelesaikan panduan cepat ini, anda perlu xcode sebuah aplikasi yang dibuat di back4app ikuti https //www back4app com/docs/get started/new parse app untuk belajar bagaimana membuat aplikasi parse di back4app catatan ikuti https //www back4app com/docs/ios/parse swift sdk untuk membuat proyek xcode yang terhubung ke back4app memahami aplikasi daftar to do kami untuk lebih memahami parseswift sdk parseswift sdk anda akan melakukan operasi crud pada aplikasi daftar to do database aplikasi akan memiliki kelas tugas sederhana dengan judul dan deskripsi (keduanya string string ) anda dapat memperbarui judul dan/atau deskripsi setiap tugas referensi cepat perintah yang akan kita gunakan setelah sebuah objek mematuhi parseswift parseswift protokol, itu secara otomatis mengimplementasikan serangkaian metode yang akan memungkinkan anda untuk mengelola objek dan memperbarui perubahan apa pun di database back4app anda mengingat objek todolistitem todolistitem 1 struct todolistitem parseobject { 2 3 4 /// title for the todo item 5 var title string? 6 7 /// description for the todo item 8 var description string? 9 } metode ini terdaftar di bawah create //once created an instance of todolistitem object and set its custom properties, you can save it on your back4app database by calling any of the following methods 1 var newitem todoilisttem 2 // newitem's properties 3 4 // saves newitem on your back4app database synchronously and returns the new saved item it throws and error if something went wrong 5 let saveditem = try? newitem save() 6 7 // saves newitem on your back4app database asynchronously, and passes a result\<todolistitem, parseerror> object to the completion block to handle the save proccess 8 newitem save { result in 9 // handle the result to check the save was successfull or not 10 } 11 read //for reading objects stored on your back4app database, todolistitem now provides the query() static method which returns a query\<todolistitem> this query object can be constructed using on or more queryconstraint objects int he following way 1 let query = todolistitem query() // a query to fetch all todolistitem items on your back4app database 2 let query = todolistitem query("title" == "some title") // a query to fetch all todolistitem items with title "some title" on your back4app database 3 let query = todolistitem query(\["title" == "some title", "description" = "ok"]) // a query to fetch all todolistitem items with title = "some title" and description = "ok" 4 5 // fetchs the items synchronously or throws an error if found 6 let fetcheditems = try? query find() 7 8 // fetchs the items asynchronously and calls a completion block passing a result object containing the result of the operation 9 query find { result in 10 // handle the result 11 } update //given the objectid of an object stored on you back4app database, you can update it in the following way 1 let itemtoupdate = todolistitem(objectid "oobject id") 2 // update the properites of itemtoupdate 3 4 // save changes synchronousty 5 itemtoupdate save() 6 7 // or save changes asynchronously 8 itemtoupdate save { result in 9 // handle the result 10 } delete //the deletion process is performed by calling the method delete() on the object to be deleted 1 var itemtodelete todolistitem 2 3 // delete itemtodelete synchronously 4 try? itemtodelete delete() 5 6 // delte itemtodelete asynchronously 7 itemtodelete delete { result in 8 // handleresult 9 } 1 buat template aplikasi daftar tugas kapan saja, anda dapat mengakses proyek lengkap melalui repositori github kami https //github com/templates back4app/ios crud to do list buka xcode, dan temukan file scenedelegate swift scenedelegate swift untuk menambahkan bilah navigasi di atas aplikasi, kami mengatur uinavigationcontroller uinavigationcontroller sebagai pengontrol tampilan root dengan cara berikut 1 class scenedelegate uiresponder, uiwindowscenedelegate { 2 3 var window uiwindow? 4 5 func scene( scene uiscene, willconnectto session uiscenesession, options connectionoptions uiscene connectionoptions) { 6 guard let scene = (scene as? uiwindowscene) else { return } 7 8 window = init(windowscene scene) 9 window? rootviewcontroller = uinavigationcontroller(rootviewcontroller todolistcontroller()) 10 window? makekeyandvisible() 11 12 // additional logic 13 } 14 15 16 } kelas pengontrol tampilan root ( todolistcontroller todolistcontroller ) untuk pengontrol navigasi adalah subclass dari uitableviewcontroller uitableviewcontroller , ini memudahkan untuk menyusun daftar item 2 siapkan objek crud objek yang ingin anda simpan di database back4app anda harus sesuai dengan parseobject parseobject protokol di aplikasi to do list kami, objek ini adalah todolistitem todolistitem oleh karena itu, anda pertama tama perlu membuat objek ini 1 import foundation 2 import parseswift 3 4 struct todolistitem parseobject { 5 // required properties from parseobject protocol 6 var objectid string? 7 var createdat date? 8 var updatedat date? 9 var acl parseacl? 10 11 /// title for the todo item 12 var title string? 13 14 /// description for the todo item 15 var description string? 16 } objek ini mendefinisikan sebuah kelas di database back4app anda setiap instance baru dari objek ini kemudian disimpan di database anda di bawah todolistitem todolistitem kelas 3 siapkan todolistcontroller di todolistcontroller todolistcontroller kita harus mengimplementasikan semua konfigurasi yang diperlukan untuk navigationbar navigationbar , dan tableview tableview properti 1 class todolistcontroller uitableviewcontroller { 2 var items \[todolistitem] = \[] 3 4 override func viewdidload() { 5 super viewdidload() 6 7 setuptableview() 8 setupnavigationbar() 9 } 10 11 private func setupnavigationbar() { 12 navigationitem title = "to do list" uppercased() 13 navigationitem rightbarbuttonitem = uibarbuttonitem(barbuttonsystemitem add, target self, action #selector(handlenewitem)) 14 } 15 16 private func setuptableview() { 17 tableview\ register(todolistitemcell self, forcellreuseidentifier todolistitemcell identifier) 18 } 19 20 override func tableview( tableview uitableview, numberofrowsinsection section int) > int { 21 items count 22 } 23 24 override func tableview( tableview uitableview, cellforrowat indexpath indexpath) > uitableviewcell { 25 let cell = tableview\ dequeuereusablecell(withidentifier todolistitemcell identifier, for indexpath) as! todolistitemcell 26 cell item = items\[indexpath row] 27 return cell 28 } 29 30 /// this method is called when the user wants to add a new item to the to do list 31 @objc private func handlenewitem() { 32 33 } 34 35 36 } untuk menyimpulkan langkah ini, kami menerapkan sel tampilan tabel kustom todolistitemcell todolistitemcell 1 // content of todolistitemcell swift file 2 class todolistitemcell uitableviewcell { 3 class var identifier string { "\\(nsstringfromclass(self self)) identifier" } // cell's identifier 4 5 /// when set, it updates the title and detail texts of the cell 6 var item todolistitem? { 7 didset { 8 textlabel? text = item? title 9 detailtextlabel? text = item? description 10 } 11 } 12 13 override init(style uitableviewcell cellstyle, reuseidentifier string?) { 14 super init(style subtitle, reuseidentifier reuseidentifier) 15 16 accessorytype = detailbutton // this accessory button will be used to present edit options for the item 17 } 18 19 required init?(coder nscoder) { 20 super init(coder coder) 21 22 accessorytype = detailbutton // this accessory button will be used to present edit options for the item 23 } 24 } 4 alur crud kami menerapkan semua logika crud di todolistcontroller todolistcontroller kelas pergi ke todolistcontroller swift todolistcontroller swift dan tambahkan metode berikut ke todolistcontroller todolistcontroller kelas 1 // mark crud flow 2 extension todolistcontroller { 3 /// creates a todolistitem and stores it on your back4app database 4 /// parameters 5 /// title the title for the to do task 6 /// description an optional description for the to to task 7 func createobject(title string, description string?) { 8 9 } 10 11 /// retrieves all the todolistitem objects from your back4app database 12 func readobjects() { 13 14 } 15 16 /// updates a todolistitem object on your back4app database 17 /// parameters 18 /// objectid the object id of the todolistitem to update 19 /// newtitle new title for the to to task 20 /// newdescription new description for the to do task 21 func updateobject(objectid string, newtitle string, newdescription string?) { 22 23 } 24 25 /// deletes a todolistitem on your back4app database 26 /// parameter item the item to be deleted on your back4app database 27 func deleteobject(item todolistitem) { 28 29 } 30 } \ buat objek sekarang kita mulai mengimplementasikan createobject(title\ description ) createobject(title\ description ) metode buat sebuah instance dari todolistitem todolistitem menggunakan init(title\ description ) init(title\ description ) initializer untuk menyimpan item baru ini di database back4app anda, protokol parseswift parseswift menyediakan metode save() save() metode ini dapat dipanggil secara sinkron atau asinkron, pilih salah satu sesuai dengan kasus penggunaan anda implementasi asinkron harus terlihat seperti ini 1 func createobject(title string, description string?) { 2 let item = todolistitem(title title, description description) 3 4 item save { \[weak self] result in 5 guard let self = self else { return } 6 switch result { 7 case success(let saveditem) 8 self items append(saveditem) 9 dispatchqueue main async { 10 self tableview\ insertrows(at \[indexpath(row self items count 1, section 0)], with right) 11 } 12 case failure(let error) 13 dispatchqueue main async { 14 self showalert(title "error", message "failed to save item \\(error message)") 15 } 16 } 17 } 18 } sekarang kita dapat menyelesaikan tindakan untuk tombol tambah yang terletak di sisi kanan bilah navigasi pergi ke todolistcontroller todolistcontroller dan tambahkan yang berikut ini 1 class todolistcontroller uitableviewcontroller { 2 enum itemdescription int { case title = 0, description = 1 } 3 4 5 6 /// this method is called when the user wants to add a new item to the to do list 7 @objc private func handlenewitem() { 8 showeditcontroller(item nil) 9 } 10 11 /// presents an alert where the user enters a to do task for either create a new one (item parameter is nil) or edit an existing one 12 private func showeditcontroller(item todolistitem?) { 13 let controllertitle string = item == nil ? "new item" "update item" 14 15 let edititemalertcontroller = uialertcontroller(title controllertitle, message nil, preferredstyle alert) 16 17 edititemalertcontroller addtextfield { textfield in 18 textfield tag = itemdescription title rawvalue 19 textfield placeholder = "title" 20 textfield text = item? title 21 } 22 23 edititemalertcontroller addtextfield { textfield in 24 textfield tag = itemdescription description rawvalue 25 textfield placeholder = "description" 26 textfield text = item? description 27 } 28 29 let mainactiontitle string = item == nil ? "add" "update" 30 31 let mainaction uialertaction = uialertaction(title mainactiontitle, style default) { \[weak self] in 32 guard let title = edititemalertcontroller textfields? first(where { $0 tag == itemdescription title rawvalue })? text else { 33 return edititemalertcontroller dismiss(animated true, completion nil) 34 } 35 36 let description = edititemalertcontroller textfields? first(where { $0 tag == itemdescription description rawvalue })? text 37 38 edititemalertcontroller dismiss(animated true) { 39 if let objectid = item? objectid { // if the item passed as parameter is not nil, the alert will update it 40 self? updateobject(objectid objectid, newtitle title, newdescription description) 41 } else { 42 self? createobject(title title, description description) 43 } 44 } 45 } 46 47 let cancelaction = uialertaction(title "cancel", style cancel, handler nil) 48 49 edititemalertcontroller addaction(mainaction) 50 edititemalertcontroller addaction(cancelaction) 51 52 present(edititemalertcontroller, animated true, completion nil) 53 } 54 } \ baca objek kami beralih ke readobjects() readobjects() metode mengambil todolistitem todolistitem item dari database back4app anda dilakukan melalui sebuah query\<todolistitem> query\<todolistitem> objek query ini diinstansiasi dengan cara berikut 1 func readobjects() { 2 let query = todolistitem query() 3 4 } dalam tutorial ini, kami menggunakan kueri yang akan mengambil semua item dari tipe todolistitem todolistitem dari database back4app anda jika anda ingin mengambil sekumpulan item tertentu, anda dapat memberikan queryconstraint queryconstraint elemen ke todolistitem query(queryconstraint ) todolistitem query(queryconstraint ) sebagai contoh, untuk mengambil semua item di mana title == "some title" title == "some title" , kueri mengambil bentuk 1 let query = todolistitem query("title" == "some title") setelah anda menyiapkan kueri, kita melanjutkan untuk mengambil item dengan memanggil query find() query find() sekali lagi, ini dapat dilakukan secara sinkron atau asinkron dalam aplikasi daftar tugas kami, kami mengimplementasikannya secara asinkron 1 func readobjects() { 2 let query = todolistitem query() 3 4 query find { \[weak self] result in 5 guard let self = self else { return } 6 switch result { 7 case success(let items) 8 self items = items 9 dispatchqueue main async { 10 self tableview\ reloadsections(\[0], with top) 11 } 12 case failure(let error) 13 dispatchqueue main async { 14 self showalert(title "error", message "failed to save item \\(error message)") 15 } 16 } 17 } 18 } dengan readobjects() readobjects() selesai, kita sekarang dapat mengambil semua tugas yang disimpan di database back4app anda dan menampilkannya segera setelah aplikasi masuk ke latar depan kembali ke todolistcontroller todolistcontroller dan override viewdidappear() viewdidappear() metode 1 class todolistcontroller uitableviewcontroller { 2 3 4 override func viewdidappear( animated bool) { 5 super viewdidappear(animated) 6 7 readobjects() 8 } 9 10 11 } \ perbarui objek diberikan objectid objectid dari sebuah todolistitem todolistitem , sangat mudah untuk melakukan pembaruan kita cukup menginstansiasi sebuah todolistitem todolistitem menggunakan init(objectid ) init(objectid ) sebagai inisialisator selanjutnya, kita memperbarui properti yang kita butuhkan dan memanggil save() save() metode (dari todolistitem todolistitem ) untuk menyimpan perubahan 1 func updateobject(objectid string, newtitle string, newdescription string?) { 2 var item = todolistitem(objectid objectid) 3 item title = newtitle 4 item description = newdescription 5 6 item save { \[weak self] result in 7 switch result { 8 case success 9 if let row = self? items firstindex(where { $0 objectid == item objectid }) { 10 self? items\[row] = item 11 dispatchqueue main async { 12 self? tableview\ reloadrows(at \[indexpath(row row, section 0)], with fade) 13 } 14 } 15 case failure(let error) 16 dispatchqueue main async { 17 self? showalert(title "error", message "failed to save item \\(error message)") 18 } 19 } 20 } 21 } \ hapus objek menghapus objek di database back4app anda sangat mirip dengan membuat objek kami mulai dengan membuat sebuah instance dari todolistitem todolistitem dengan objectid dari item yang ingin kami hapus selanjutnya, kami cukup memanggil (secara sinkron atau asinkron) metode delete() delete() dari objek tersebut jika penghapusan berhasil, kami memperbarui ui, jika tidak, kami melaporkan kesalahan 1 func deleteobject(item todolistitem) { 2 item delete { \[weak self] result in 3 switch result { 4 case success 5 if let row = self? items firstindex(where { $0 objectid == item objectid }) { 6 self? items remove(at row) 7 dispatchqueue main async { 8 self? tableview\ deleterows(at \[indexpath(row row, section 0)], with left) 9 } 10 } 11 case failure(let error) 12 dispatchqueue main async { 13 self? showalert(title "error", message "failed to save item \\(error message)") 14 } 15 } 16 } 17 } dengan deleteobject(item ) deleteobject(item ) dan updateobject(objectid\ newtitle\ newdescription) updateobject(objectid\ newtitle\ newdescription) selesai, kita melanjutkan untuk menambahkan tindakan yang sesuai untuk memanggil operasi ini kembali ke todolistcontroller todolistcontroller dan tambahkan 1 // mark uitableviewdatasource delegate 2 extension todolistcontroller { 3 // when the user taps on the accessory button of a cell, we present the edit options for the to do list task 4 override func tableview( tableview uitableview, accessorybuttontappedforrowwith indexpath indexpath) { 5 guard !items isempty else { return } 6 7 showeditoptions(item items\[indexpath row]) 8 } 9 10 /// presents a sheet where the user can select an action for the to do list item 11 private func showeditoptions(item todolistitem) { 12 let alertcontroller = uialertcontroller(title title, message nil, preferredstyle actionsheet) 13 14 let editaction = uialertaction(title "edit", style default) { \[weak self] in 15 self? showeditcontroller(item item) 16 } 17 18 let deleteaction = uialertaction(title "delete", style destructive) { \[weak self] in 19 alertcontroller dismiss(animated true) { 20 self? deleteobject(item item) 21 } 22 } 23 24 let cancelaction = uialertaction(title "cancel", style cancel) { in 25 alertcontroller dismiss(animated true, completion nil) 26 } 27 28 alertcontroller addaction(editaction) 29 alertcontroller addaction(deleteaction) 30 alertcontroller addaction(cancelaction) 31 32 present(alertcontroller, animated true, completion nil) 33 } 34 } seperti yang kami sebutkan sebelumnya, tombol aksesori di setiap todolistitemcell todolistitemcell memicu lembar edit melalui tableview( accessorybuttontappedforrowwith ) tableview( accessorybuttontappedforrowwith ) metode delegasi selesai! pada titik ini, anda telah belajar bagaimana melakukan operasi crud dasar dengan parse di ios