【问题标题】:Updating UILabel from another ViewController从另一个 ViewController 更新 UILabel
【发布时间】:2013-08-20 15:52:51
【问题描述】:

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 系统有误解。

亲切的问候。 Link to full project code

感谢您的帮助。 :)

【问题讨论】:

  • 首先,您正在尝试更新视图的新实例,而不是(可能)已经存在的实例。您需要获取对已经存在的视图的引用并公开允许您访问它的控件的属性或方法。
  • 我明白了,谢谢你的提示,我会尝试纠正这个问题。欣赏它。
  • 如果我正确理解了您的示例,StatsScreen 继承自 UIViewController,对吗?如果是这样,您将实例化它并添加到 UITabBarController 父实例;在内部,框架根据默认代码实例化底层视图。

标签: c# xamarin.ios xamarin


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多