Computer >> Máy Tính >  >> Điện thoại thông minh >> iPhone

Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Chào mọi người! Trong bài viết này, chúng ta sẽ tìm hiểu cách thêm cơ sở dữ liệu Realm vào ứng dụng iOS.

Chúng tôi sẽ tạo một ứng dụng ToDo đơn giản để bạn có thể tìm hiểu cách thực hiện các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) trong cơ sở dữ liệu Realm.

Vương quốc là gì?

Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Realm là một cơ sở dữ liệu di động mã nguồn mở, thân thiện với nhà phát triển và dễ sử dụng. Bạn cũng có thể sử dụng nó để thay thế cho Dữ liệu cốt lõi trong ứng dụng iOS.

Realm là một cơ sở dữ liệu di động đa nền tảng, có nghĩa là bạn có thể sử dụng nó trong các ứng dụng Android và iOS gốc cũng như trong các ứng dụng đa nền tảng như những ứng dụng được tạo bằng React Native. Nó hỗ trợ Objective-C, Swift, Java, Kotlin, C # và JavaScript.

Cách thiết lập Realm trong dự án iOS của bạn

Chúng tôi có thể thêm Realm vào dự án iOS của mình bằng cách sử dụng SPM (Trình quản lý gói Swift), Cocoa Pods hoặc Carthage. Ở đây, chúng tôi sẽ sử dụng Cocoa Pods để thêm Realm Pod vào dự án iOS của chúng tôi.

  1. Mở Xcode và tạo một dự án ứng dụng iOS trống với UIKit và Swift mà không sử dụng Dữ liệu cốt lõi.
  2. Bây giờ, hãy đóng Xcode và mở thiết bị đầu cuối. Điều hướng đến thư mục dự án của bạn bằng thiết bị đầu cuối.
  3. Chạy lệnh sau để tạo PodFile.
pod init

4. Bây giờ khi bạn liệt kê nội dung của thư mục, bạn có thể thấy rằng có một Podfile mới. Mở tệp bằng bất kỳ trình soạn thảo văn bản nào (ở đây tôi đã sử dụng Vim). Chỉnh sửa Podfile của bạn để nó trông giống như hình dưới đây. Lưu và đóng Podfile.

Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Bây giờ chúng ta đã chỉ định sự phụ thuộc cho Realm DB, chúng ta có thể cài đặt các phần phụ thuộc bằng cách chạy lệnh dưới đây:

pod install 
Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Như bạn có thể thấy, chúng tôi đã thêm thành công phụ thuộc Realm DB vào dự án iOS của chúng tôi. Bây giờ hãy chạy lệnh dưới đây để mở dự án của chúng tôi bằng Xcode.

open YOUR_APP_NAME.xcworkspace

Lưu ý:sau khi mở Xcode, hãy đảm bảo rằng bạn xây dựng dự án của mình bằng cách nhấn Command + B.

Cách thiết kế giao diện người dùng của bạn trong Realm

Chúng tôi sẽ giữ cho giao diện người dùng của ứng dụng đơn giản. Mở Main.storyboard và tạo một giao diện người dùng đơn giản như được hiển thị bên dưới bằng cách thêm chế độ xem bảng với một ô nguyên mẫu. Sau đó, nhúng bộ điều khiển điều hướng và tạo IBOutlets cho tableview trong tệp ViewController.swift:

Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Cách tạo Mô hình dữ liệu trong Realm

Trong ứng dụng Công việc của chúng tôi, mỗi công việc có một tên công việc và một id công việc. Chúng ta sẽ tạo một lớp Model để đại diện cho nhiệm vụ todo. Trong trình điều hướng của dự án, hãy nhấp chuột phải và tạo một tệp Swift mới và thêm mã bên dưới.

import Foundation
import RealmSwift


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

Cô ấy, chúng tôi đã tạo ra lớp mô hình của chúng tôi có tên là ToDoTask. Nó kế thừa lớp Đối tượng là một lớp đi kèm với RealmDB. Lớp này xử lý tất cả các quy trình lưu trữ dữ liệu được tạo bằng cách sử dụng lớp mô hình này trong cơ sở dữ liệu.

Chúng tôi cũng đã thêm hai thuộc tính:tasknote , đó là nhiệm vụ cần thực hiện và taskid - cả hai loại chuỗi. @objc có nghĩa là mã Swift của bạn hiển thị với Objective C và dynamic nghĩa là bạn muốn sử dụng điều phối động Objective C.

Các chức năng cơ bản của ứng dụng CRUD

Ứng dụng của chúng tôi sẽ thực hiện các chức năng sau:

  1. Nhận thông tin đầu vào từ người dùng bằng AlertViewController.
  2. Thêm đầu vào vào cơ sở dữ liệu và cả vào chế độ xem bảng.
  3. Cho phép người dùng chỉnh sửa thông tin đầu vào của họ.
  4. Vuốt để xóa một hàng để xóa dữ liệu khỏi cả chế độ xem bảng và cơ sở dữ liệu.
  5. Tìm nạp tất cả dữ liệu (nếu có) từ cơ sở dữ liệu và hiển thị nó trong chế độ xem bảng.

Cách nhận thông tin đầu vào từ người dùng bằng AlertViewController

Mở ViewController.swift và thêm mã bên dưới vào bên trong ViewDidLoad() phương pháp. Và tạo một hàm mới có tên là addTask() và thêm mã để hiển thị bộ điều khiển chế độ xem cảnh báo với một hộp văn bản để nhận đầu vào từ người dùng.

Bây giờ khi nhấn nút thanh bên phải, nó sẽ gọi addTask() hàm sẽ hiển thị alertviewcontroller với một trường văn bản để nhận thông tin đầu vào của người dùng.

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)
    }

Cách thêm đầu vào vào cơ sở dữ liệu và dạng xem bảng

Để lưu dữ liệu vào Realm, trước tiên chúng ta cần có được một thể hiện cho Realm mà qua đó chúng ta có thể truy cập vào tất cả các phương thức cần thiết cho các hoạt động CRUD. Tạo thuộc tính kiểu Realm trong ViewController.swift và khởi tạo nó trong viewDidLoad() phương pháp.

 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()
       
    }

Tạo một mảng trống kiểu DataModel (ToDoTask) của chúng tôi. Mảng này sẽ chứa tất cả các tác vụ cần được thêm vào dạng xem bảng và cơ sở dữ liệu.

Bây giờ bên trong addTask() chức năng sửa đổi đóng hành động Thêm để nó nhận đầu vào của người dùng và tạo một ID ngẫu nhiên cho đầu vào đó. Sau đó, nối nó vào mảng của chúng tôi và lưu nó vào cơ sở dữ liệu.

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()
            }

Bây giờ khi bạn chạy ứng dụng, dữ liệu sẽ được lưu trong cơ sở dữ liệu. Nhưng nó sẽ không hiển thị trong dạng xem bảng vì chúng tôi chưa triển khai các phương thức ủy nhiệm.

Làm cho lớp ViewController triển khai UITableViewDelegateUITableViewDataSource giao thức và thêm các sơ khai giao thức.

Bây giờ bên trong numberOfRowsInSection , trả về số lượng của mảng nhiệm vụ của chúng tôi, cung cấp số lượng hàng được thêm vào chế độ xem bảng. Con số này bằng với số phần tử trong mảng nhiệm vụ.

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

Việc tiếp theo chúng ta cần làm là chỉ định nội dung trong mỗi hàng. Chúng tôi có thể thực hiện việc này bằng cách sử dụng cellForRowAt phương pháp ủy quyền. Ở đây, chúng tôi sắp xếp hàng cho một ô bằng cách sử dụng số nhận dạng mà chúng tôi đã đề cập trong bảng phân cảnh và chỉ định văn bản nhãn làm thuộc tính tasknote của phần tử mảng nhiệm vụ.

 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()
    }

Cách cho phép người dùng chỉnh sửa thông tin đầu vào của họ

Bây giờ chúng tôi phải cho phép người dùng chỉnh sửa các tác vụ đã nhập của họ và cập nhật các thay đổi trong cả cơ sở dữ liệu và giao diện người dùng. Chúng tôi có thể làm điều này bằng cách sử dụng các phương pháp tương tự để lấy thông tin đầu vào từ người dùng. Triển khai didSelectRowAt phương thức ủy quyền sẽ được gọi khi người dùng nhấn vào hàng xem bảng.

Thêm mã bên dưới hiển thị AlertViewController với chế độ xem văn bản. Sau đó cập nhật nội dung của ô với văn bản đã nhập, đồng thời cập nhật nội dung cơ sở dữ liệu.

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)
    }

Cách vuốt để xóa một hàng và xóa dữ liệu từ cả chế độ xem bảng và cơ sở dữ liệu

Ở đây chúng tôi sẽ triển khai tính năng vuốt để xóa trong chế độ xem bảng của chúng tôi để người dùng có thể xóa tác vụ của họ. Nhưng dưới mui xe khi người dùng vuốt xóa một hàng của chế độ xem bảng thì hàng đó sẽ xóa dữ liệu khỏi cơ sở dữ liệu, mảng mô hình dữ liệu và cập nhật giao diện người dùng của chế độ xem bảng.

Chúng tôi có thể thực hiện việc này bằng cách triển khai Kiểu cam kết chỉnh sửa phương thức ủy quyền và thêm mã sau:

 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)
            })
        }
    }

Cách tìm nạp tất cả dữ liệu (nếu hiện tại) từ cơ sở dữ liệu và hiển thị nó trong dạng xem bảng

Bây giờ chúng ta sẽ thực hiện thao tác cuối cùng của mình, Đọc. Bất cứ khi nào người dùng khởi chạy ứng dụng, ứng dụng sẽ tìm nạp dữ liệu từ cơ sở dữ liệu (nếu có dữ liệu) và hiển thị nó trong chế độ xem bảng.

Chúng ta có thể làm điều này bằng cách tạo một hàm getTodo trong tệp nhanh của bộ điều khiển chế độ xem và thêm mã sau vào bên trong nó:

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()
        }
        
        
    }

Mẹo bổ sung:Cách xem nội dung cơ sở dữ liệu của bạn trong trình mô phỏng iOS

Bây giờ khi bạn chạy ứng dụng của mình, bạn có thể thấy rằng nó hoạt động như mong đợi. Nhưng làm thế nào chúng ta có thể kiểm tra xem dữ liệu có thực sự được lưu trữ trong cơ sở dữ liệu hay không? Chúng tôi có thể sử dụng một ứng dụng có tên MongoDB Realm Studio, qua đó chúng tôi có thể xem dữ liệu của mình được lưu trữ trong cơ sở dữ liệu Realm của trình mô phỏng.

Lưu ý rằng phương pháp này chỉ hoạt động khi bạn kiểm tra ứng dụng bằng trình mô phỏng iOS

Trong viewDidLoad() , hãy thêm dòng mã bên dưới để in đường dẫn tệp thực của ứng dụng của chúng tôi:

 print(realmDB.configuration.fileURL!)
Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Bây giờ sao chép đường dẫn tệp được in trong bảng điều khiển, mở terminal và chạy lệnh sau:

open REALM_FILE_PATH_HERE
Đảm bảo bạn đã tải xuống MongoDB Realm Studio từ trình duyệt trước khi chạy lệnh trên.

Bây giờ nó sẽ mở RealmFile của ứng dụng trong MongoDB Realm Studio. Thao tác này sẽ hiển thị dữ liệu được lưu trữ trong cơ sở dữ liệu ở định dạng bảng.

Nếu bạn thực hiện các thay đổi đối với dữ liệu của mình bằng cách chỉnh sửa hoặc xóa tác vụ, các thay đổi sẽ được phản ánh trong ứng dụng MongoDB Realm Studio:

Cách thêm cơ sở dữ liệu Realm vào ứng dụng CRUD của iOS bằng Swift

Xin chúc mừng! Bạn đã tạo một ứng dụng đơn giản triển khai các hoạt động CRUD trong ứng dụng iOS.