iPhone
 Computer >> コンピューター >  >> スマートフォン >> iPhone

Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

こんにちは、みんな!この記事では、Realm データベースを iOS アプリに追加する方法を学びます。

Realm データベースで CRUD (作成、読み取り、更新、削除) 操作を実行する方法を学習できるように、簡単な ToDo アプリを作成します。

レルムとは?

Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

Realm は、開発者にとって使いやすく使いやすいオープンソースのモバイル データベースです。また、iOS アプリの Core Data の代わりとして使用することもできます。

Realm はクロス プラットフォームのモバイル データベースです。つまり、ネイティブの Android および iOS アプリだけでなく、React Native を使用して作成されたクロス プラットフォーム アプリでも使用できます。 Objective-C、Swift、Java、Kotlin、C#、JavaScript をサポートしています。

iOS プロジェクトでレルムを設定する方法

SPM (Swift Package Manager)、Cocoa Pods、または Carthage を使用して Realm を iOS プロジェクトに追加できます。ここでは、Cocoa Pods を使用して Realm Pod を iOS プロジェクトに追加します。

<オール>
  • Xcode を開き、Core Data を使用せずに、UIKit と Swift を使用して空の iOS アプリ プロジェクトを作成します。
  • Xcode を閉じて、ターミナルを開きます。ターミナルを使用してプロジェクト ディレクトリに移動します。
  • 次のコマンドを実行して PodFile を作成します。
  • pod init

    4. ディレクトリの内容を一覧表示すると、新しい Podfile があることがわかります。任意のテキスト エディターを使用してファイルを開きます (ここでは Vim を使用しました)。下の画像のようになるように Podfile を編集します。 Podfile を保存して閉じます。

    Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

    Realm DB の依存関係を指定したので、次のコマンドを実行して依存関係をインストールできます。

    pod install 
    
    Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

    ご覧のとおり、iOS プロジェクトに Realm DB 依存関係を正常に追加しました。以下のコマンドを実行して、Xcode でプロジェクトを開きます。

    open YOUR_APP_NAME.xcworkspace

    注:Xcode を開いた後、必ず Command+B を押してプロジェクトをビルドしてください。

    Realm でユーザー インターフェイスを設計する方法

    アプリの UI をシンプルに保ちます。 Main.storyboard を開き、プロトタイプ セルを含むテーブル ビューを追加して、以下に示すような単純な UI を作成します。次に、ナビゲーション コントローラーを埋め込み、ViewController.swift ファイルに tableview の IBOutlets を作成します。

    Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

    Realm でデータ モデルを作成する方法

    ToDo アプリでは、各タスクにタスク名とタスク ID があります。 todo タスクを表す Model クラスを作成します。プロジェクト ナビゲータで右クリックして新しい Swift ファイルを作成し、以下のコードを追加します。

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

    ToDoTask という名前のモデル クラスを作成しました。 RealmDB に付属するクラスである Object クラスを継承しています。このクラスは、このモデル クラスを使用して作成されたデータをデータベースに保存する内部プロセスをすべて処理します。

    tasknote という 2 つのプロパティも追加しました。 、これは実行するタスクであり、 taskid – 両方とも文字列型。 @objc Swift コードが Objective C と dynamic に見えることを意味します Objective C の動的ディスパッチを使用することを意味します。

    基本的な CRUD アプリ関数

    このアプリは次の機能を実行します:

    <オール>
  • AlertViewController を使用してユーザーから入力を取得します。
  • 入力をデータベースとテーブル ビューに追加します。
  • ユーザーが入力内容を編集できるようにする
  • スワイプして行を削除し、テーブル ビューとデータベースの両方からデータを削除します。
  • データベースからすべてのデータ (存在する場合) を取得し、テーブル ビューに表示します。
  • 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 に保存するには、まず、CRUD 操作に必要なすべてのメソッドにアクセスできる Realm のインスタンスを取得する必要があります。 ViewController.swift にタイプ Realm のプロパティを作成します ファイルを開き、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 を作成するように、Add アクション クロージャを変更します。次に、それを配列に追加して、データベースに保存します。

    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 を更新する必要があります。

    コミットのeditingStyleを実装することでこれを行うことができます メソッドをデリゲートし、次のコードを追加します:

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

    すべてのデータを取得する方法 (データベースから) を取得し、テーブル ビューに表示します

    次に、最後の操作である Read を実装します。ユーザーがアプリを起動するたびに、データベースからデータを取得し (データが存在する場合)、テーブル ビューに表示する必要があります。

    関数 getTodo を作成することでこれを行うことができます ビュー コントローラーの迅速なファイルで、その中に次のコードを追加します。

    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 シミュレーターでデータベース コンテンツを表示する方法

    これでアプリを実行すると、期待どおりに動作することがわかります。しかし、データが本当にデータベースに保存されているかどうかを確認するにはどうすればよいでしょうか? MongoDB Realm Studio というアプリを使用して、シミュレーターの Realm データベースに保存されているデータを表示できます。

    この方法は、iOS シミュレーターを使用してアプリをテストする場合にのみ機能することに注意してください

    viewDidLoad() で メソッドに、アプリの実際のファイル パスを出力する以下のコード行を追加します。

     print(realmDB.configuration.fileURL!)
    Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

    コンソールに出力されたファイル パスをコピーし、ターミナルを開き、次のコマンドを実行します。

    open REALM_FILE_PATH_HERE
    
    上記のコマンドを実行する前に、ブラウザから MongoDB Realm Studio をダウンロードしたことを確認してください。

    これで、MongoDB Realm Studio でアプリの RealmFile が開きます。これにより、データベースに格納されているデータが表形式で表示されます。

    タスクを編集または削除してデータを変更すると、変更が MongoDB Realm Studio アプリに反映されます。

    Swift を使用して Realm データベースを iOS CRUD アプリに追加する方法

    おめでとう! iOS アプリで CRUD 操作を実装する簡単なアプリを作成しました。


    1. iOS 11 でポッドキャスト アプリを使用する方法

      Apple はついに、自社の Podcast アプリを一新する必要があることに気づき、iOS 11 によって新しい命が吹き込まれました。待望のアプリのビジュアル アップデートは魅力的で、ポッドキャストを簡単に追加して聞くことができます。さらに、これに加えて、あなたの好みを知るようになると、いくつかのポッドキャストもお勧めします.新機能は作成者とユーザーの両方を対象としています。 革新的なタブのデザイン アプリを起動して最初に気付くのは、アプリの下部に追加された 4 つの新しいタブです。 4 つのタブは、Listen Now、Library、Browse、Search です。 [検索] タブに

    2. iOS 11の写真アプリで人を追加または削除する方法

      iOS 10 Apple は、顔を認識し、それらを利用して人々の顔を含む写真を整理する革新的な機能を導入しました。そのため、愛する人の写真をすべて見なければならないたびに、すべての写真をめくる代わりに、その人の写真のサムネイルをクリックするだけで済みました。しかし、iOS 11 では多くの変更や修正が行われ、その中にはコンフォート ゾーンから抜け出すようなものもありました。そのようなものの 1 つは、iOS 11 での変更は、人物の写真を含むサムネイルを追加するオプションに直接アクセスできないことです。そこで、iOS 11 を実行している iPhone の写真アプリから人物を追加または削除する