Giter Site home page Giter Site logo

realm-sampler's Introduction

Realm Sampler

概要

Realmを用いたToDoアプリの基礎

機能

[DONE]

  • TODOの追加、
  • TODOの削除
  • TODOの編集
  • TODOの期限追加
  • TODOのカテゴリー決定
  • カテゴリーごとの表示
  • カテゴリーの追加

[追加予定]

  • TODOの期限のタイミングでの通知

CRUD

CRUDのやり方は、Realm Docsのとおりです。

モデルの設計

ToDoModelのカラムは以下のとおり

  • id プライマリーキー(Int)
  • todo todoの内容(String)
  • category todoのカテゴリー(CategoryModel)
  • due date 期限(NSDate)
  • isDone 完了済みかどうか(0ならまだ、1なら完了済)

CategoryModelのカラムは以下のとおり

  • id プライマリーキー(Int)
  • category カテゴリーの内容(String)

Create データの作成

以下のコードでデータベースにデータを作成できます

 // 保存するためのデータを作成する。今回はToDoModel
 let todo = ToDoModel()
 todo.todo = "hoge"

 // Realmに作成したデータを保存
 let realm = try Realm()
 try realm.write {
   realm.add(todo)
 }

本プロジェクトでは、ToDoModelとCategoryModelそれぞれのクラスで保存するためのcreate()save()で保存するデータの作成と作成したデータの保存をそれぞれ行います。

ToDoModel.swift

// ToDoModelのcreateとsave
static func create(content: String, category: CategoryModel, dueDate: NSDate) -> ToDoModel {

    let todo = ToDoModel()
    todo.todo = content
    todo.category = category
    todo.due_date = dueDate
    todo.isDone = 0
    todo.id = lastId()

    return todo
}

func save() {
    try! ToDoModel.realm.write {
        ToDoModel.realm.add(self)
    }
}

CategoryModel.swift

// CategoryModelのcreateとsave
static func create(newCategory text: String) -> CategoryModel {

    let category = CategoryModel()
    category.id = lastId()
    category.category = text

    return category
}

func save() {

    try! CategoryModel.realm.write{
        CategoryModel.realm.add(self)
    }
}

Read データの取得

以下のコードでデータベースからデータを取得します

let realm = try Realm()
let todos = realm.objects(ToDoModel)

本プロジェクトではToDoModelとCategoryModelそれぞれのクラスでデータを取得するためのloadAll()で保存するデータ取得をそれぞれ行います。またToDoModelでは、loadUndone()でもデータを取得します

ToDoModel.swift

// ToDoModelでのデータを取得するためのメソッド
static func loadAll() -> [ToDoModel] {

    let todos = realm.objects(ToDoModel).sorted("id", ascending: true)
    var ret: [ToDoModel] = []
    for todo in todos {
        ret.append(todo)
    }
    return ret
}

static func loadUndone() -> [ToDoModel] {

    let todos = realm.objects(ToDoModel).filter("isDone = 0")
    var ret: [ToDoModel] = []
    for todo in todos {
        ret.append(todo)
    }
    return ret
}

CategoryModel.swift

// データを全件取得
static func loadAll() -> [CategoryModel] {

    let categories = realm.objects(CategoryModel).sorted("id", ascending: true)
    var array: [CategoryModel] = []
    for category in categories {
        array.append(category)
    }
    return array
}

Update データの更新

以下のコードでデータベースにデータの更新を行えます。

let realm = try Realm()
try realm.write {
  // ここで変更を行う
}

本プロジェクトでは、ToDoModelとCategoryModelではそれぞれで更新するためのupdate()でデータの更新を行います。

ToDoModel.swift

// ToDoModelのupdate
static func update(model: ToDoModel,content: String, category: CategoryModel, dueDate: NSDate) {

    try! realm.write({
        model.todo = content
        model.category = category
        model.due_date = dueDate
        model.isDone = 0
    })
}

CategoryModel.swift

// CategoryModelのupdate
static func update(model: CategoryModel, content: String) {

    try! realm.write {
        model.category = content
    }
}

Delete データの削除

以下のコードでデータベースのデータを削除できます。

let realm = try Realm()
try! realm.write {
  realm.delete(削除するデータ)
}   

ToDoModelとCategoryModelでは、それぞれViewControllerとCategoryViewControllerのUITableViewにUITableViewRowActionを追加し、そこで削除しています。

ViewControllerExtension.swift

// ToDoModelの削除。
let item = self.realm.objects(ToDoModel)[indexPath.row]
try! self.realm.write {
    self.realm.delete(item
    )
}

CategoryViewController.swift

// CategoryModelの削除。UITableViewRowActionで呼び出すことで削除する。
func deleteModel(index id: Int) {
    try! realm.write {
        realm.delete(categories[id])
    }
}

realm-sampler's People

Contributors

s11y avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

realm-sampler's Issues

aaa

ogsagaskgjas

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.