Одна из ваших проблем заключается в том, что представление вашего HomeViewController2 загружается только при первом обращении к нему, поэтому ваш метод viewDidLoad будет вызываться только при первом нажатии элемента панели вкладок, который соответствует HomeViewController2.
Есть несколько других проблем с вашим кодом, которые несколько не связаны с вашими вопросами, но чтобы дать вам подсказку, переместите вызов [super viewDidLoad] в верхнюю часть вашего - (void) метода viewDidLoad.
Также обратите внимание, что если бы вызывался ваш viewDidLoad
метод на HomeViewController2, вы фактически создали бы новый экземпляр вашего модального представления (входа в систему), который бы не содержал информацию об имени пользователя, введенную в предыдущем экземпляре. Поэтому, даже если метод вызывается, пользовательская информация не будет передана на ваш контроллер.
Суть в том, что вам не нужно передавать имя пользователя всем контроллерам представления. Создайте объект класса User (подкласс NSObject) с переменными экземпляра для всех пользовательских атрибутов, которые вы хотите сохранить (например, имя пользователя, адрес электронной почты, имя, фамилия и т. Д.), И сделайте его экземпляром-одиночкой (это необязательно, но убедитесь, что у вас есть только один). экземпляр этого класса на протяжении всего жизненного цикла вашего приложения).
Создайте экземпляр класса в вашем делегате приложения или там, где вам сначала нужно получить доступ к объекту User (возможно, в вашем контроллере представления входа в систему), установите атрибуты, которые вам нужно установить, и отклоните модальный контроллер представления.
С этого момента вы можете просто запросить экземпляр пользователя и получить доступ к его атрибутам из любой точки вашего кода, включая другой контроллер представления в контроллере панели вкладок.
Вот простой пример метода инициализации для одноэлементного объекта User:
@implementation User
static User *user_ = nil;
+ (User*)sharedInstance
{
if (user_ == nil)
{
user_ = [[super allocWithZone:NULL] init];
}
return user_;
}
А вот как вы можете получить доступ к объекту пользователя после импорта заголовочного файла «User.h» в любом месте вашего кода:
User *user = [User sharedInstance];