从另一个ViewController更新UILabel

时间:2013-08-20 15:52:51

标签: c# xamarin.ios xamarin

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。对象引用未设置为对象的实例。

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

我必须犯一个致命的错误,更新像这样的UILabel并不困难。

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

你怎么建议我这样做,我觉得我误解了ViewController系统。

亲切的问候。 Link to full project code

感谢您的帮助。 :)

2 个答案:

答案 0 :(得分:0)

"对象未设置"可能是由于很多事情。我强烈建议弄清楚它在代码中的位置抛出异常?你是否使用setStats方法,并在那里出错?可能的错误是:

  • 其中一个标签未正确映射到插座,这就是抛出错误。要弄清楚,在方法中放置一个调试器断点,并将鼠标悬停在所有标签属性上,确保它们不为空。这让我有几次。
  • 传入的变量为null,并且调用ToString()会引发异常(因为您拥有所有值类型,所以不太可能)
  • 从代码
  • 中的其他位置抛出了一些无关的错误

答案 1 :(得分:0)

您是否使用Xcode设计界面,这些元素是连接到UI的出口?

然后问题很简单:在调用ViewDidLoad方法之前,这些元素在创建对象时将为null。这是什么时候设置值。