2013-08-20 4 views
0

новой для Xamarin и прошивкой, так что это может быть глупый вопрос:Обновление UILabel из другого ViewController

В принципе, у меня есть 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 Исправлено. Исключение исключений NullReference. В экземпляре объекта не задана ссылка на объект.

Я попытался изменить ситуацию, вызвав разные последовательности методов, но, похоже, я могу только вызвать setStats из класса, в котором он находится, StatsScreen.

Должно быть, я совершил фатальную ошибку, поэтому не обязательно будет обновлять UILabel, как это.

По существу, у меня есть контроллер табуляции (NewGameScreen) с 3 вкладками. Я хочу, чтобы контроллер табуляции управлял 3-мя подзонами (вкладками), поскольку мне нужно обмениваться данными между 3-мя экранами и думать, что наличие надзора класса будет что если я установлю некоторые переменные в NewGameScreen, я могу обновить каждое из трех подзонов (один из них - StatsScreen).

Как бы вы порекомендовали мне пойти по этому поводу, я чувствую, что не понимаю систему ViewController.

С уважением. Link to full project code

Спасибо за помощь. :)

+0

Во-первых, вы пытаетесь обновить новый экземпляр представления, а не экземпляр, который (предположительно) уже существует. Вам нужно получить ссылку на представление, которое уже существует, и выставить свойство или метод, которые позволят вам получить доступ к его элементам управления. – Jason

+0

Я вижу, спасибо за подсказку, я постараюсь исправить это. Ценить это. – kknehra

+0

Если я правильно понимаю ваш пример, StatsScreen наследует UIViewController, правильно? Если это так, вы должны создать экземпляр этого объекта и добавить к родительскому экземпляру UITabBarController; внутренне структура создает экземпляр базового представления на основе кода по умолчанию. –

ответ

0

«Объект не установлен» может быть вызван множеством вещей. Я очень рекомендую выяснить, где в коде он генерирует исключение? Вы переходите к методу setStats, и там ошибки? Возможные ошибки:

  • Один из ярлыков неправильно нанесен на розетку, и это вызывает ошибку. Чтобы выяснить, поставьте точку останова отладчика в методе и наведите указатель мыши на все свойства метки, убедитесь, что они не равны нулю. Это досталось мне пару раз.
  • переменные передаются в пустом, и вызове ToString() бросает исключение (не вероятно, хотя, так как у вас есть все типы значений)
  • Некоторые несвязанные ошибки бросаются из где-то в коде
0

ARE YOU используя Xcode для разработки интерфейса, и эти элементы являются выходами, подключенными к пользовательскому интерфейсу?

Тогда проблема проста: эти элементы будут пустыми от создания объекта до тех пор, пока не будет вызван метод ViewDidLoad. Это когда значения будут установлены.

Смежные вопросы