私は SO ユーザータグに慣れていないので、これが機能することを願っています: @aaron
これは、私の問題に関連する最も近い質問ですが、正確には問題ではありません。(Google、Bing、および SO 独自の検索を試みました。) https://stackoverflow.com/questions/25014006/nullreferenceexception-with-parseobjects-in-array-of-pointers
私の問題: Facebook と Parse の両方と連携する Unity Web-Player ゲームがあります。多くの問題を解決した後、Facebook に簡単に接続し、ユーザーのプロフィール情報と写真を取得できるようになりました。次に、解析に接続してユーザーを解析にログインさせ、ゲーム関連のデータ (ハイスコア、通貨統計、パワーアップなど) を取得しようとしますが、それを試みたときに NullReferenceException が発生します。エラー メッセージの具体的な内容は次のとおりです。
「NullReferenceException: オブジェクト参照が C:...\Assets\Scripts\CSharp\CharacterScripts\GameStateController の GameStateController.ParseFBConnect (System.String userId、System.String accessToken、DateTime tokenExpiration) [0x0001a] でオブジェクトのインスタンスに設定されていません。 .cs:1581 at GameStateController.Update () [0x0011f] in C:\Users\Michieal\Desktop\Dragon Rush Game\Assets\Scripts\CSharp\CharacterScripts\GameStateController.cs:382"
このエラー メッセージを生成するコードは次のとおりです。
public void ParseFBConnect(string userId, string accessToken, DateTime tokenExpiration)
{
Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync (userId, accessToken, tokenExpiration).ContinueWith<ParseUser> (t =>
{
if (t.IsFaulted || t.IsCanceled)
{
if (t.IsCanceled)
Util.LogError ("LoginTask::ParseUser:: Cancelled. >.<");
// The login failed. Check the error to see why.
Util.LogError ("Error Result: " + t.Result.ToString ());
Util.LogError ("Error Result (msg): " + t.Exception.Message);
Util.LogError ("Error Result (inmsg): " + t.Exception.InnerException.Message);
}
if (t.IsCompleted)
{ // No need to link the user to a FB account, as there are no "real" (non fb) accounts yet.
Util.Log ("PFBC::Login result reports successful. You Go Gurl!");
// Login was successful.
user = t.Result; // assign the resultant user to our "user"...
RetryPFBC = false;
return user;
}
return t.Result;
});
if (user.ContainsKey ("NotNew"))
{ // on true, then we don't have to set up the keys...
Util.Log ("User, " + user.Username + ", contains NotNew Key.");
}
else
{
CreateKeys (); // Create Keys will only build MISSING Keys, setting them to the default data specifications.
user.Email = Email;
user.SaveAsync (); // if we have created the keys data, save it out.
}
}
適切な (認証済みの) Facebook 値 (FB.UserId、FB.AccessToken、FB.AccessTokenExpiresAt) がこの順序で渡されます。FB Sdk バージョン 6.0.0 と Parse Unity SDK バージョン 1.2.16 を使用しています。
ログ ファイルでは、debug.log/Util.log コメントの代わりに、"Null Reference" エラー (上記) が発生し、その後に "About to parse url: https://api.parse.com/1 " が続きます。 /classes/_User
https://api.parse.com/1/classes/_Userが有効なドメインかどうかの確認
request-host: api.parse.com を有効なドメインに対してチェックしています: *"
そして、それがちょうど止まったところです。そこで、10 秒ほどごとに ParseFBConnect() 関数を呼び出す単純な再試行ブロックを Update() 関数に作成しました。これは、ログ ファイルが同じエラー セットでいっぱいになるだけのようです。インターネットでヘルプを検索した後、FB.AccessTokenExpiresAt を DateTime.UtcNow.AddDays(1) に変更してみました。私はどちらも私のために働くことができないようです。Parse でダッシュボードをチェックして、更新またはアクティビティが表示されているかどうかを確認すると、表示されず、数日間表示されていません。スクリプトの実行順序は次のとおりです。
Parse.ParseInitialzeBehaviour -- -2875 (非常に最初のもの) Facebook ローダー (FB、エディター、キャンバスなど) -- -1000 から -900 GameStateController -- -875 ... つまり、Parse.ParseInitializeBehaviour が読み込まれていることがわかります。まず (別の検索結果)、ログイン メソッドの保存場所を変更することで、NullReference を Parse.Unity.dll まで追跡しました。GSC はプレーヤー上にあります (プレーヤーはスプラッシュ スクリーンで開始し、ゲーム全体を通して残ります)。また、Parse.ParseInitializeBehaviour を Player ゲームオブジェクトと空のゲームオブジェクト (単純な dontdestroy(gameObject) スクリプトを使用) に配置しようとしました。また、アプリケーション ID と DotNet キーがオブジェクトに正しく入力されています。
最初に parse をセットアップしたとき、現在の製品版のゲームでは、上記のコード スニペットに基づいてユーザー アカウントを正常に作成できます。さて、URLを解析しようとすると壊れます...
だから、私の質問は次のとおりです。私は何を間違っていますか? 他の誰かがこの問題を抱えていますか? そして、これを修正するために何をすべきかについて、誰かがアイデア/提案/などを持っていますか? 私は本当にこれを機能させ、ユーザーをログインさせて、データを取得し、ゲーム内の他のものを壊すことができるようにしたいだけです:D
すべての助けに感謝します!! 時間を割いてこれを読んでくれてありがとう。