所以我有一个使用Parse的应用程序。我能够创建没有问题的新ParseObjects,以及查询已保存的ParseObjects。但是,每当我尝试更新我查询过的现有ParseObject时,都会收到以下错误:
“get_bundleIdentifier只能从主线程调用。 加载场景时,将从加载线程执行构造函数和字段初始值设定项。 不要在构造函数或字段初始值设定项中使用此函数,而是将初始化代码移动到唤醒或启动函数。“
现在我发现有些人会遇到类似的错误,“get_bundleIdentifier”就是区别,我认为这与不从“主线程”运行有关,但我不知道如何影响。我在协程中尝试了与建议here相同的代码,我得到了同样的错误。
我正在使用Parse版本1.6.0和Unity Pro 5.1.2。这是我的代码:
using UnityEngine;
using System.Collections;
using Parse;
using System.Threading.Tasks;
public class SimpleParseScript : MonoBehaviour {
// Use this for initialization
void Start () {
var query = ParseObject.GetQuery("ChallengeScores") // query to parse to find scores and whos turn
.WhereEqualTo("challengeID", 20307271925313064);
query.FirstAsync().ContinueWith(t =>
{
ParseObject gameStatus = t.Result;
print (gameStatus.ObjectId); // print queried ParseObject ObjectId - works fine
gameStatus["turnsTaken"] = 100;
Task saveTask = gameStatus.SaveAsync();
});
}
}
现在,如果我注释掉“gameStatus [”turnsTaken“] = 100;”,那么尝试保存它,它运行得很好,但是由于显而易见的原因没有保存。
任何人都有线索?解析文档right here表示它应该像在查询后声明并再次保存它一样简单,但不要去。
感谢您的时间和耐心。
答案 0 :(得分:0)
所以我想出了一个解决方案;我认为你可以在查询中动态保存值,但我想将信息保存到变量应该发生在查询之外。
我现在的工作看起来像这样:
using Parse;
using System.Threading.Tasks;
public class MainMenuScript : MonoBehaviour {
ParseObject parseObjToUpdate;
private bool hasUpdatedParse;
public string myCurrentChalID;
void Start()
{
hasUpdatedParse = false;
var query = ParseObject.GetQuery("ChallengeStatus")
.WhereEqualTo("challengeID", myCurrentChalID);
query.FirstAsync().ContinueWith(t =>
{
parseObjToUpdate = t.Result;
print (parseObjToUpdate.ObjectId); // to debug that something is happening and it's the right object
});
}
void Update ()
{
if (parseObjToUpdate != null && !hasUpdatedParse)
{
parseObjToUpdate["playerTurn"] = PlayerPrefs.GetString("opponentID");
parseObjToUpdate.SaveAsync();
hasUpdatedParse = true;
}
}
所以是的。将此标记为已解决。谢谢大家的关注,这很棒。