0

Xamarin 和 iOS 的新手,所以这可能是一个愚蠢的问题:

基本上,我有一个 UITabBarController、NewGameScreen.cs(带有 NewGameScreen.designer.cs 和 NewGameScreen.xib),作为选项卡之一,我有 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。你调用的对象是空的。

我尝试过改变事物,调用不同的方法序列,但我似乎只能从它所在的类 StatsScreen 中调用 setStats。

我一定是犯了一个致命的错误,像这样更新 UILabel 应该不难。

本质上,我有一个带有 3 个选项卡的选项卡控制器(NewGameScreen)。我希望选项卡控制器管理 3 个子视图(选项卡),因为我需要在 3 个屏幕之间共享数据,并认为拥有一个监督类将是有益的,这样如果我在 NewGameScreen 中设置了一些变量,我可以更新 3 个子视图中的每一个(其中一个是 StatsScreen)。

你会建议我怎么做,我觉得我对 ViewController 系统有误解。

亲切的问候。链接到完整的项目代码

谢谢你的帮助。:)

4

2 回答 2

0

您是否使用 Xcode 来设计界面,而这些元素是连接到 UI 的插座?

那么问题就很简单了:从创建对象到调用 ViewDidLoad 方法之前,这些元素都是空的。这是何时设置值。

于 2013-08-21T17:42:02.663 回答
0

“对象未设置”可能是由于很多原因造成的。我强烈建议弄清楚它在代码中的哪个位置抛出异常?你做到了 setStats 方法,它在那里出错了吗?可能的错误是:

  • 其中一个标签未正确映射到插座,这会引发错误。要弄清楚,在方法中放置一个调试器断点,并将鼠标悬停在所有标签属性上,确保它们不为空。这让我有几次。
  • 传入的变量为空,调用ToString()会引发异常(虽然不太可能,因为您拥有所有值类型)
  • 从代码中的其他地方抛出了一些不相关的错误
于 2013-08-21T11:50:25.920 回答