mBaaSで用意されているデータストアの一歩進んだ使い方です。今回はSwiftでポインターを使う方法を解説します。
ポインターとは
ポインターはデータストア内のデータ同士を連携させるための仕組みです。似た仕組みにリレーションがありますが、リレーションは1対多、または多対多の連携を行うのに対して、ポインターは1対1または1対多の連携を行います。ただし、右側(1または多)は自分がどのデータと結びついているのか分かりません。あくまでも左側の1がデータの紐付けを管理します。
接続先になるデータを保存する
まず接続先になるデータを保存します。接続元データはすでに存在していることとします。
let memo = NCMBObject.init(className: "Memo") memo?.setObject(txtMemo.text, forKey: "Memo") memo?.saveInBackground({ error in if (error != nil) { print(error) } else { // 保存後の処理 } });
保存したら、そのデータを紐付けます。 setObject
を使い、指定したキーにオブジェクトを紐付けます。
let user = NCMBUser.current() user?.setObject(memo, forKey: "memo") user?.saveInBackground({ error in if (error != nil) { print(error) } })
データを取り出す
保存したデータを取り出す場合には NCMBQuery
を使いつつ、includeKey
で指定します。
let User = NCMBQuery.init(className: "user") User?.whereKey("objectId", equalTo: user?.objectId) User?.includeKey("memo") User?.findObjectsInBackground({(results, error) in if (error != nil) { print(error); } else { // 取得後の処理 } })
データが取得できたら、そのデータを取り出します。
let u = results?[0] as! NCMBUser print(u.object(forKey: "memo"))
そうすると紐付けられたMemoクラスのデータが取り出せます。
Optional({ "__type" : "Object", "updateDate" : { "__type" : "Date", "iso" : "2019-01-28T05:50:42.419Z" }, "Memo" : "test", "className" : "Memo", "acl" : { "*" : { "write" : true, "read" : true } }, "objectId" : "iaUIp39pKXlSTjR5", "createDate" : { "__type" : "Date", "iso" : "2019-01-28T05:50:42.418Z" } })
保存時については特に迷うことはないでしょう。データクラスのオブジェクトをそのまま保存するだけです。逆にデータを取り出す際には includeKey
を使ってポインターが入っているカラムを指定してください。