0

Xamarin と iOS の新機能なので、これはばかげた質問かもしれません。

基本的に、UITabBarController、NewGameScreen.cs (NewGameScreen.designer.cs および NewGameScreen.xib を使用) があり、タブの 1 つとして StatsScreen.cs (StatsScreen.designer.cs および StatsScreen.xib を使用) があります。StatsScreen には、NewGameScreen から変更したいラベルがいくつかあるため、新しい StatsScreen オブジェクトを作成しました。

StatsScreen stats = new StatsScreen ();

次に、メソッドを次のように呼び出します。

stats.setStats (day, debt, money, bank, health, location); // All of the parameters here are local variables

メソッドは次のようになります。

public void setStats (int day, long debt, long money, long bank, int health, string location)
{
    LabelDay.Text = day.ToString ();
    LabelDebt.Text = debt.ToString ();
    LabelMoney.Text = money.ToString ();
    LabelBank.Text = bank.ToString ();
    LabelHealth.Text = health.ToString ();
    LabelLocation.Text = location;
}

実行してクリックすると、次のようになります。

System.NullReferenceException がスローされました。オブジェクト参照がオブジェクト インスタンスに設定されていません。

メソッドのさまざまなシーケンスを呼び出して、物事を変更しようとしましたが、setStats は、それが存在するクラスである StatsScreen 内からしか呼び出すことができないようです。

このように UILabel を更新するのは難しくないはずです。

基本的に、3 つのタブを含むタブ コントローラー (NewGameScreen) があります。3 つの画面間でデータを共有する必要があるため、タブ コントローラーで 3 つのサブビュー (タブ) を管理する必要があり、監督クラスを持つことは有益であると考えました。 NewGameScreen にいくつかの変数を設定すると、3 つのサブビュー (そのうちの 1 つは StatsScreen) のそれぞれを更新できます。

ViewController システムを誤解しているように感じます。

敬具。完全なプロジェクト コードへのリンク

助けてくれてありがとう。:)

4

2 に答える 2

0

「オブジェクトが設定されていません」は、多くのことが原因である可能性があります。コードのどこで例外がスローされるかを突き止めることを強くお勧めします。setStats メソッドにしますか?そこでエラーになりますか? 考えられるエラーは次のとおりです。

  • ラベルの 1 つがアウトレットに適切にマップされておらず、エラーがスローされています。把握するには、メソッドにデバッガー ブレークポイントを配置し、すべてのラベル プロパティにマウスを合わせて、それらが null でないことを確認します。これは私を数回手に入れました。
  • 渡された変数は null であり、呼び出すとToString()例外がスローされます (ただし、すべての値の型があるため、そうではありません)
  • コードの別の場所から無関係なエラーがスローされています
于 2013-08-21T11:50:25.920 に答える