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

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

SwiftでNCMBを使う(ポインター編)

f:id:mbaasdevrel:20180806093819p:plain

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 を使ってポインターが入っているカラムを指定してください。

中津川 篤司

中津川 篤司

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