LoginSignup
3
2

More than 5 years have passed since last update.

NCMB(Unity,C#)で登録したobjectIdの保存&検索

Last updated at Posted at 2016-12-23

NCMBでobjectIdでデータを検索する方法は、以下のURLに記載されている。

// Parentクラスのうち、objectIdがxxxxxxxxのオブジェクトを取得する
// このとき、Childフィールドに格納した子オブジェクトも取ってくるよう指定
NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject> ("Parent");
query.WhereEqualTo("objectId","xxxxxxxx");
query.Include("Child");
query.FindAsync ((List<NCMBObject> objList ,NCMBException e) => {
    if (e == null) {
        // 取得成功時
        foreach( NCMBObject obj in objList ){
            NCMBObject child = (NCMBObject)obj["Child"];
            Debug.Log( child.ObjectId );
        }
    } else {
        // 取得失敗時
    }
});

でも、そもそも登録したレコードのobjectIdを保存する方法が書かれていない。
(登録したレコードを後から名前などで検索する方法は却下。あくまで匿名の人間のレコードを登録した瞬間に保存する方法を書いている)

自分で色々調べてみたら、以下の書き方でobjectIdを保存できた。
ただしこれが正しいかどうかは分からない。

string object_id_ = "TEST";
NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>(class_name_);
query.WhereEqualTo("objectId", object_id_);
query.FindAsync((List<NCMBObject> objList, NCMBException e) =>
{
    //検索成功したら    
    if (e == null)
    {
        //未登録だったら
        if (objList.Count == 0)
        {
            NCMBObject obj = new NCMBObject("HighScore");
            obj["score"] = score_;
            obj.Save();
            object_id_ = obj.ObjectId;
            //PlayerPrefs.SetString("objectId", object_id_);
        }
        else
        {
            //更新したい場合は、ここに処理を記載
            //(単体)objList[0]
            //(複数)foreach NCMBObject obj in objLit
            objList[0]["score_"] = 9999;
            objList[0].Save();
        }
    }
});

ポイントとしては、obj.SaveAsync()ではなくてobj.Save()としているところ。
非同期ではなくて、同期でやる。

SaveAsyncにすると、

object_id_ = obj.ObjectId;

でstring object_id_に空白が入る。

(でも、素人だから非同期と同期の使い分けが分からない。こういうやり方してもいいのか?)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2