2013-08-20 133 views
0

新到Xamarin和iOS更新的UILabel所以這可能是一個愚蠢的問題:從另一視圖控制器

基本上,我有一個的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; 
} 

當我運行並點擊,我得到:

一個SY引發了stem.NullReferenceException。你調用的對象是空的。

我嘗試過改變周圍的事情,調用不同的方法序列,但我似乎只能從它所在的類,StatsScreen中調用setStats。

我必須犯一個致命的錯誤,這樣更新UILabel應該不會很困難。

本質上,我有一個Tab控制器(NewGameScreen),其中包含3個選項卡。我希望Tab Controller管理3個子視圖(選項卡),因爲我需要在3個屏幕之間共享數據,並認爲有一個監督類會是有益的,如果我在NewGameScreen中設置了一些變量,我可以更新3個子視圖(其中之一是StatsScreen)。

你會如何推薦我這樣做,我覺得我誤解了ViewController系統。

親切的問候。 Link to full project code

感謝您的幫助。 :)

+0

首先,您嘗試更新View的新實例,而不是(大概)已經存在的實例。您需要獲取對已存在的視圖的引用,並公開一個允許您訪問其控件的屬性或方法。 – Jason

+0

我明白了,感謝您的提示,我會盡力糾正此問題。欣賞它。 – kknehra

+0

如果我正確理解你的例子,StatsScreen繼承自UIViewController,是否正確?如果是這樣,你會實例化這個並添加到UITabBarController父實例;在內部,框架基於默認代碼實例化底層視圖。 –

回答

0

「對象未設置」可能是由於很多事情。我強烈建議搞清楚代碼中的哪些地方會拋出異常?你是否使用了setStats方法,並且在那裏有錯誤?可能的錯誤是:

  • 其中一個標籤沒有正確映射到插座,並且是引發錯誤。爲了解決這個問題,在該方法中放置一個調試器斷點,並將鼠標懸停在所有標籤屬性上,確保它們不爲空。這讓我有幾次。
  • 傳入的變量爲空,(因爲你有所有的值類型不太可能,雖然)
  • 一些無關的錯誤正在從別的地方扔在代碼
0

你叫ToString()拋出一個異常使用Xcode設計界面,這些元素是連接到用戶界面的插座?

然後問題很簡單:在調用ViewDidLoad方法之前,這些元素將從創建對象時爲空。哪些是什麼時候設定值。

相關問題