前回はタスクを配列で管理する方法を紹介しました。この方法だとデータ件数が増えずに手軽に管理できる反面、データの削除や更新、メタ情報(締め切り日など)を追加する際には面倒です。
そこでもう一つの方法としてリレーションによるデータ管理があります。今回はその実装方法を紹介します。
データの保存方法
タスクを保存する場合ですが、最初にタスクを保存してからユーザ情報に紐付けます。
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)
そうすると、今回の場合は会員管理のクラスにリレーションというカラムが追加されます。
データの取得方法
データの取得方法は、まず保存時と同じように 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は設定していませんが、こちらも他のオブジェクト同様に指定可能です。
簡単なデータであれば配列、複雑になりそうであればリレーションと使い分けるのが良いでしょう。