Computer >> คอมพิวเตอร์ >  >> สมาร์ทโฟน >> iPhone

วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

สวัสดีทุกๆคน! ในบทความนี้ เราจะมาเรียนรู้วิธีเพิ่มฐานข้อมูล Realm ให้กับแอป iOS

เราจะสร้างแอป ToDo แบบง่ายๆ เพื่อให้คุณสามารถเรียนรู้วิธีดำเนินการ CRUD (สร้าง อ่าน อัปเดต ลบ) ในฐานข้อมูล Realm

อาณาจักรคืออะไร

วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

Realm เป็นฐานข้อมูลมือถือแบบโอเพ่นซอร์สซึ่งเป็นมิตรกับนักพัฒนาและใช้งานง่าย คุณยังสามารถใช้เป็นทางเลือกแทน Core Data ในแอป iOS

Realm เป็นฐานข้อมูลมือถือข้ามแพลตฟอร์ม ซึ่งหมายความว่าคุณสามารถใช้มันในแอป Android และ iOS ดั้งเดิมและในแอปข้ามแพลตฟอร์มเช่นที่สร้างโดยใช้ React Native รองรับ Objective-C, Swift, Java, Kotlin, C# และ JavaScript

วิธีตั้งค่า Realm ในโครงการ iOS ของคุณ

เราสามารถเพิ่ม Realm ให้กับโปรเจ็กต์ iOS ของเราโดยใช้ SPM (ตัวจัดการแพ็คเกจ Swift), Cocoa Pods หรือ Carthage ในที่นี้ เราจะใช้ Cocoa Pods เพื่อเพิ่ม Realm Pod ให้กับโปรเจ็กต์ iOS ของเรา

  1. เปิด Xcode และสร้างโปรเจ็กต์แอป iOS เปล่าด้วย UIKit และ Swift โดยไม่ต้องใช้ Core Data
  2. ปิด Xcode แล้วเปิดเทอร์มินัล นำทางไปยังไดเรกทอรีโครงการของคุณโดยใช้เทอร์มินัล
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อสร้าง PodFile
pod init

4. ตอนนี้ เมื่อคุณแสดงรายการเนื้อหาของไดเร็กทอรี คุณจะเห็นว่ามี Podfile ใหม่ เปิดไฟล์โดยใช้โปรแกรมแก้ไขข้อความ (ที่นี่ฉันใช้ Vim) แก้ไข Podfile ของคุณเพื่อให้ดูเหมือนกับภาพด้านล่าง บันทึกและปิด Podfile

วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

ตอนนี้เราได้ระบุการพึ่งพาสำหรับ Realm DB แล้ว เราสามารถติดตั้งการพึ่งพาได้โดยใช้คำสั่งด้านล่าง:

pod install 
วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

อย่างที่คุณเห็น เราได้เพิ่มการพึ่งพา Realm DB ในโครงการ iOS ของเราเรียบร้อยแล้ว เรียกใช้คำสั่งด้านล่างเพื่อเปิดโครงการของเราใน Xcode

open YOUR_APP_NAME.xcworkspace

หมายเหตุ:หลังจากเปิด Xcode แล้ว อย่าลืมสร้างโครงการโดยกด Command+B

วิธีออกแบบส่วนต่อประสานผู้ใช้ของคุณในขอบเขต

เรากำลังจะทำให้ UI ของแอปของเราเรียบง่าย เปิด Main.storyboard และสร้าง UI อย่างง่ายตามที่แสดงด้านล่างโดยเพิ่มมุมมองตารางด้วยเซลล์ต้นแบบ จากนั้นฝังตัวควบคุมการนำทางและสร้าง IBOutlets สำหรับมุมมองตารางในไฟล์ ViewController.swift:

วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

วิธีสร้างโมเดลข้อมูลในขอบเขต

ในแอป ToDo ของเรา แต่ละงานจะมีชื่องานและรหัสงาน เรากำลังจะสร้างคลาส Model เพื่อเป็นตัวแทนของงาน todo ในตัวนำทางโปรเจ็กต์ คลิกขวาและสร้างไฟล์ Swift ใหม่ และเพิ่มโค้ดด้านล่าง

import Foundation
import RealmSwift


class ToDoTask:Object
{
    @objc dynamic var tasknote: String?
    @objc dynamic var taskid: String?
}

เธอได้สร้างคลาสโมเดลของเราชื่อ ToDoTask มันสืบทอดคลาส Object ซึ่งเป็นคลาสที่มาพร้อมกับ RealmDB คลาสนี้จัดการกระบวนการภายใต้ประทุนทั้งหมดของการบันทึกข้อมูลที่สร้างโดยใช้คลาสโมเดลนี้ในฐานข้อมูล

เรายังเพิ่มคุณสมบัติสองรายการ:tasknote ซึ่งเป็นงานที่ต้องทำและ taskid – ทั้งสองชนิดสตริง @objc หมายความว่ารหัส Swift ของคุณสามารถมองเห็นได้ใน Objective C และ dynamic หมายความว่าคุณต้องการใช้ไดนามิกไดนามิก Objective C

ฟังก์ชันพื้นฐานของแอป CRUD

แอพของเราจะทำหน้าที่ดังต่อไปนี้:

  1. รับข้อมูลจากผู้ใช้โดยใช้ AlertViewController
  2. เพิ่มอินพุตไปยังฐานข้อมูลและในมุมมองตารางด้วย
  3. อนุญาตให้ผู้ใช้แก้ไขข้อมูลที่ป้อน
  4. ปัดเพื่อลบแถวเพื่อลบข้อมูลออกจากทั้งมุมมองตารางและฐานข้อมูล
  5. ดึงข้อมูลทั้งหมด (ถ้ามี) จากฐานข้อมูลและแสดงในมุมมองตาราง

วิธีรับข้อมูลจากผู้ใช้โดยใช้ AlertViewController

เปิด ViewController.swift และเพิ่มโค้ดด้านล่างใน ViewDidLoad() กระบวนการ. และสร้างฟังก์ชันใหม่ที่ชื่อว่า addTask() และเพิ่มรหัสเพื่อแสดงตัวควบคุมมุมมองการแจ้งเตือนพร้อมกล่องข้อความเพื่อรับข้อมูลจากผู้ใช้

ตอนนี้เมื่อกดปุ่มแถบขวา มันจะเรียก addTask() ฟังก์ชั่นซึ่งจะแสดง alertviewcontroller พร้อมช่องข้อความเพื่อรับข้อมูลจากผู้ใช้

navigationItem.rightBarButtonItem = UIBarButtonItem(image: .add, style: .done, target: self, action: #selector(addTask))

navigationController?.navigationBar.prefersLargeTitles = true

title = "RealmDB"
@objc
    func addTask()
    { 
        let ac = UIAlertController(title: "Add Note", message: nil, preferredStyle: .alert)
        
        ac.addTextField(configurationHandler: .none)
        
        ac.addAction(UIAlertAction(title: "Add", style: .default, handler: { (UIAlertAction) in
          
              if let text = ac.textFields?.first?.text
            {
                print(text)
            }
            
        }))
        ac.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        present(ac, animated: true, completion: nil)
    }

วิธีการเพิ่มอินพุตไปยังฐานข้อมูลและมุมมองตาราง

ในการบันทึกข้อมูลลงใน Realm ก่อนอื่นเราต้องได้รับอินสแตนซ์สำหรับ Realm ซึ่งเราสามารถเข้าถึงวิธีการทั้งหมดที่จำเป็นสำหรับการดำเนินการ CRUD สร้างคุณสมบัติของประเภทอาณาจักรใน ViewController.swift ไฟล์และเริ่มต้นใน viewDidLoad() วิธีการ

 var realmDB: Realm!
 override func viewDidLoad() {
        super.viewDidLoad()
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(image: .add, style: .done, target: self, action: #selector(addTask))
        navigationController?.navigationBar.prefersLargeTitles = true
        title = "RealmDB"
        
        realmDB = try! Realm()
       
    }

สร้างอาร์เรย์ว่างประเภท DataModel ของเรา (ToDoTask) อาร์เรย์นี้จะเก็บงานทั้งหมดที่ต้องเพิ่มในมุมมองตารางและฐานข้อมูล

ตอนนี้อยู่ใน addTask() ฟังก์ชันแก้ไขการปิดการดำเนินการเพิ่มเพื่อให้ได้รับอินพุตของผู้ใช้และสร้าง ID สุ่มสำหรับอินพุตนั้น จากนั้นผนวกเข้ากับอาร์เรย์ของเราและบันทึกลงในฐานข้อมูล

var tasks = [ToDoTask]()
 if let text = ac.textFields?.first?.text
            {
            	//Add data to data model array
                let t = ToDoTask()
                t.taskid = UUID().uuidString
                t.tasknote = text
                self.tasks.append(t)
                
                //Add data to database
                try! self.realmDB.write {
                    self.realmDB.add(t)
                }
                //Update table view UI
                self.tasktv.reloadData()
            }

ตอนนี้เมื่อคุณเรียกใช้แอพ ข้อมูลจะถูกบันทึกไว้ในฐานข้อมูล แต่จะไม่แสดงในมุมมองตารางเนื่องจากเราไม่ได้ใช้วิธีการรับมอบสิทธิ์

ทำให้คลาส ViewController ใช้ UITableViewDelegate และ UITableViewDataSource โปรโตคอลและเพิ่มต้นขั้วโปรโตคอล

ตอนนี้อยู่ใน numberOfRowsInSection วิธีคืนค่าการนับอาร์เรย์งานของเราซึ่งให้จำนวนแถวที่จะเพิ่มในมุมมองตาราง ซึ่งเท่ากับจำนวนองค์ประกอบในอาร์เรย์งาน

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: 
 Int) -> Int 
 {
        return tasks.count;
 }

สิ่งต่อไปที่เราต้องทำคือระบุเนื้อหาในแต่ละแถว เราสามารถทำได้โดยใช้ cellForRowAt วิธีการมอบหมาย ในที่นี้ เราจัดคิวเซลล์โดยใช้ตัวระบุที่เราได้กล่าวถึงในกระดานเรื่องราวและระบุข้อความป้ายกำกับเป็นคุณสมบัติ tasknote ขององค์ประกอบอาร์เรย์งาน

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        {
            cell.textLabel?.text = tasks[indexPath.row].tasknote
            return cell
        }
        return UITableViewCell()
    }

วิธีอนุญาตให้ผู้ใช้แก้ไขข้อมูลที่ป้อน

ตอนนี้เราต้องอนุญาตให้ผู้ใช้แก้ไขงานที่ป้อนและอัปเดตการเปลี่ยนแปลงทั้งในฐานข้อมูลและ UI เราสามารถทำได้โดยใช้วิธีการที่คล้ายกันในการรับข้อมูลจากผู้ใช้ ดำเนินการ didSelectRowAt วิธีการมอบหมายซึ่งจะถูกเรียกเมื่อผู้ใช้แตะแถวมุมมองตาราง

เพิ่มโค้ดด้านล่างซึ่งแสดง AlertViewController ด้วยมุมมองข้อความ จากนั้นอัปเดตเนื้อหาของเซลล์ด้วยข้อความที่ป้อน และในขณะเดียวกันก็อัปเดตเนื้อหาในฐานข้อมูล

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let tasktomodify = tasks[indexPath.row]
        let ac = UIAlertController(title: "Update task", message: nil, preferredStyle: .alert)
        
        ac.addTextField(configurationHandler: .none)
        ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (UIAlertAction) in
            if let text = ac.textFields?.first?.text
            {
                if(!text.isEmpty)
                {
                try! self.realmDB.write({
                    tasktomodify.tasknote = text
                })
                self.tasktv.reloadData()
                }
            }
        }))
        
        present(ac, animated: true, completion: nil)
    }

วิธีการปัดเพื่อลบแถว &ลบ ข้อมูลจากทั้งมุมมองตารางและฐานข้อมูล

ที่นี่เราจะใช้คุณสมบัติการปัดเพื่อลบในมุมมองตารางของเรา เพื่อให้ผู้ใช้สามารถลบงานของพวกเขาได้ แต่ภายใต้ประทุนเมื่อผู้ใช้ปัดลบแถวมุมมองตาราง ก็ควรลบข้อมูลออกจากฐานข้อมูล อาร์เรย์โมเดลข้อมูล และอัปเดต UI ของมุมมองตาราง

เราสามารถทำได้โดยใช้ commit modifiedStyle วิธีการมอบหมายและเพิ่มรหัสต่อไปนี้:

 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete
        {
            let tasktoDelete = tasks[indexPath.row]
            try! realmDB.write({
                realmDB.delete(tasktoDelete)
                self.tasks.remove(at: indexPath.row)
                self.tasktv.deleteRows(at: [indexPath], with: .fade)
            })
        }
    }

วิธีการดึงข้อมูลทั้งหมด (ถ้า ปัจจุบัน) จากฐานข้อมูลและแสดงในมุมมองตาราง

ตอนนี้เรากำลังดำเนินการดำเนินการครั้งสุดท้ายของเรา อ่าน เมื่อใดก็ตามที่ผู้ใช้เปิดแอป แอปควรดึงข้อมูลจากฐานข้อมูล (หากมีข้อมูลอยู่) และแสดงในมุมมองตาราง

เราทำได้โดยสร้างฟังก์ชัน getTodo ในไฟล์ view controller swift และเพิ่มโค้ดต่อไปนี้เข้าไป:

func getTodos()
    {
       //Get all the data from the database
        let notes = realmDB.objects(ToDoTask.self)
        
        //Clear the model data array to prevent duplicates
        self.tasks.removeAll()
        
        /*If the fetched data is not empty then add it to model data array and update the UI */
        if(!notes.isEmpty)
        {
        for n in notes
        {
            
            self.tasks.append(n)
            
        }
            self.tasktv.reloadData()
        }
        
        
    }

เคล็ดลับโบนัส:วิธีดูเนื้อหาฐานข้อมูลของคุณใน iOS Simulator

ตอนนี้ เมื่อคุณเรียกใช้แอป คุณจะเห็นว่าแอปทำงานตามที่คาดไว้ แต่เราจะตรวจสอบได้อย่างไรว่าข้อมูลถูกเก็บไว้ในฐานข้อมูลจริงหรือไม่? เราสามารถใช้แอปที่เรียกว่า MongoDB Realm Studio ซึ่งเราสามารถดูข้อมูลของเราที่จัดเก็บไว้ในฐานข้อมูล Realm ของเครื่องจำลองได้

โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะเมื่อคุณทดสอบแอปโดยใช้โปรแกรมจำลอง iOS

ใน viewDidLoad() วิธีเพิ่มบรรทัดโค้ดด้านล่างซึ่งจะพิมพ์เส้นทางไฟล์จริงของแอปของเรา:

 print(realmDB.configuration.fileURL!)
วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

ตอนนี้คัดลอกเส้นทางของไฟล์ที่พิมพ์ในคอนโซล เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งต่อไปนี้:

open REALM_FILE_PATH_HERE
ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลด MongoDB Realm Studio จากเบราว์เซอร์ก่อนที่จะรันคำสั่งด้านบน

ตอนนี้จะเปิด RealmFile ของแอปใน MongoDB Realm Studio ซึ่งจะแสดงข้อมูลที่จัดเก็บไว้ในฐานข้อมูลในรูปแบบตาราง

หากคุณเปลี่ยนแปลงข้อมูลโดยแก้ไขหรือลบงาน การเปลี่ยนแปลงจะมีผลในแอป MongoDB Realm Studio:

วิธีเพิ่มฐานข้อมูล Realm ลงในแอป iOS CRUD โดยใช้ Swift

ยินดีด้วย! คุณได้สร้างแอปง่ายๆ ที่ใช้การดำเนินการ CRUD ในแอป iOS