ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Swift × iOS SDKでTodoアプリを作る(タスクをリレーションで管理する)

f:id:mbaasdevrel:20180806093819p:plain

前回はタスクを配列で管理する方法を紹介しました。この方法だとデータ件数が増えずに手軽に管理できる反面、データの削除や更新、メタ情報(締め切り日など)を追加する際には面倒です。

そこでもう一つの方法としてリレーションによるデータ管理があります。今回はその実装方法を紹介します。

データの保存方法

タスクを保存する場合ですが、最初にタスクを保存してからユーザ情報に紐付けます。

let task = NCMBObject(className: "todoClass")
task?.setObject(TodoTextField.text!, forKey: "task")
task?.save(nil)

保存した後、リレーションを結びつけたいデータの relationforKey メソッドを使ってリレーションを作成します。

let user = NCMBUser.current()
let relation = user?.relationforKey("tasks")
relation?.add(task)

そして、リレーションを結びつけたいデータを保存します。 relation?.save ではないので注意してください。

user?.save(nil)

そうすると、今回の場合は会員管理のクラスにリレーションというカラムが追加されます。

f:id:mbaasdevrel:20180809131111p:plain

データの取得方法

データの取得方法は、まず保存時と同じように relationforKey メソッドでリレーションを取得します。

let relation = user?.relationforKey("tasks")

そして、そのリレーションの query メソッドでクエリーを取得し、検索条件を指定します。

relation?.query().findObjectsInBackground({(results, error) in
    if error != nil {
    } else {
        self.todos = results as! [NCMBObject]
        self.todosView?.reloadData()
    }
})

まとめ

リレーションを使うことで、個人のデータに紐付けるのではなく、複数人で共有すると言った設定も自由にできるようになります。今回はタスクのACLは設定していませんが、こちらも他のオブジェクト同様に指定可能です。

簡単なデータであれば配列、複雑になりそうであればリレーションと使い分けるのが良いでしょう。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。