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_に空白が入る。
(でも、素人だから非同期と同期の使い分けが分からない。こういうやり方してもいいのか?)