LoginSignup
52
48

More than 5 years have passed since last update.

Realmを使ってToDoアプリを作った

Last updated at Posted at 2015-05-07

Realmの基礎の発表をする機会がありましたので、勉強も兼ねて何番煎じかわかりませんが、ToDoアプリを作ってみました。といっても、Tutorial: Building a To-Do App with Realm をほとんど参考にして作り、RealmをCocoaPodsで導入したぐらいしか違いがありませんがw

コードはRealmTodoにありますので、参考にしてください。以下、コードの抜粋をしてRealmの使い方の解説をします。

ToDoItemモデルクラスの作成

ToDoItem.swift
class ToDoItem: RLMObject {
    dynamic var name = ""
    dynamic var finished = false
}

RLMObjectを継承したクラスを作り、カラムは「dynamic var 変数名 = 初期値」で定義をします。

ToDoItemモデルのオブジェクトを取得

todosは未完了のタスクで、finishedは完了済みのタスクです。
NSPredicateで条件を定義し、条件にマッチするオブジェクトがtodos, finishedに格納されています。型はRLMResultsでデータベースが更新されたら自動的に最新に反映されるので便利です。

ViewController.swift
    var todos: RLMResults {
        get {
            let predicate = NSPredicate(format: "finished == false", argumentArray: nil)
            return ToDoItem.objectsWithPredicate(predicate)
        }
    }

    var finished: RLMResults {
        get {
            let predicate = NSPredicate(format: "finished == true", argumentArray: nil)
            return ToDoItem.objectsWithPredicate(predicate)
        }
    }

オブジェクトの新規追加

トランザクション内で新規追加処理を行います。typedTextはtextFieldの入力値です。TodoItem()でモデルをインスタンス化し、nameカラムに値を入れ、保存をするという流れです。最後にtableViewを更新することで、追加したオブジェクトが反映されます。

ViewController.swift
   func didFinishTypingText(typedText: String?) {
       if typedText != "" {
          let newTodoItem = ToDoItem()
          newTodoItem.name = typedText!

          let realm = RLMRealm.defaultRealm()
          realm.transactionWithBlock() {
              realm.addObject(newTodoItem)
          }   
          // テーブルの更新処理
          tableView.reloadData()
       }
   }

参考サイト

基礎的なことは下記のサイトに載っていますのでこちらを参考にしてください。というか、まとめ完全版のやつを見ればほとんど大丈夫です。公式ドキュメントもわかりやすいです。

52
48
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
48