Во-первых, ничего не «экземпляр» в файле .h - это только общедоступный список, какие свойства и методы доступны для других классов. Подумайте о файле заголовка как о содержании, но только о том, что класс хочет видеть другим.
Эти свойства не существуют в памяти до тех пор, пока не будет создан экземпляр самого класса, а затем только если вы установите их на некоторое начальное значение, как только они понадобятся.
Как & где вы создаете 2-й вид? Это раскадровка или что-то еще? Первый вид, похоже, не знает, что существует 2-й, поэтому он не сможет увидеть или получить доступ к ярлыку.
View1Class.м
#import View2Class.h
@implementation View1Class
- (IBAction)startPouring_ButtonClick:(id)sender {
//Instantiate the 2ndView when you need it.
// This gives View1 a reference to View2 and its public UILabel.
View2Class * my2ndView = [[View2Class alloc] init];
my2ndView.labelTimer.text = @"foo";
}
@end
Как я уже сказал, это все еще не ясно, как/где вы на самом деле отображение 2-ой вид, хотя, так что выше фрагмент кода является неполным. Вы можете использовать modal с делегатом, или это то, где NSNotificationCenter
- полезный вариант. 2-й вид может зарегистрироваться, чтобы получать уведомления & соответственно. Существует множество учебных пособий по созданию 2-го/модального представления и их отображению при нажатии кнопки - вам, вероятно, следует взглянуть на них, чтобы выяснить, как должна выглядеть структура такого приложения. This answer должен получить вас на правильном пути.
Другие конкретные вопросы:
Почему этикетка nil
? Потому что не один ...
В этом IBAction, который, кажется, в виде 1:
- (IBAction)startPouring_ButtonClick:(id)sender
{
labelTimer.text = @"foo"; //this is looking for labelTimer in the clicked view.
}
... она ищет свою labelTimer
IBOutlet (в этом случае он должен вероятно self.labelTimer.text
), а не 2-го вида. Если в первом представлении даже нет IBUutlet UILabel, это еще одна проблема.
Если виды имеют разные функции &, то они, вероятно, не должны быть экземплярами одного и того же пользовательского класса. Если у 1-го представления нет или нет UILabel, он не должен иметь один в своем .h. Если у 2-го представления нет или нет кнопки, у него не должно быть одного в его .h. Если взгляды служат для разных целей, тогда сделайте их разными классами.
КСТАТИ
Поскольку вы используете переменный экземпляр для IBOutlets, вы должны были бы написать свою собственную добытчик & методу сеттера, если вы хотите изменить их значение. Не так ли? Чтобы сделать эти значения доступными для других классов, вам нужно сделать эти методы общедоступными. & положить их в .h. Неправильно использовать экземпляр экземпляра непосредственно с помощью getter/setter, а другие объекты определенно не должны.
Предпочтительным методом является использование @properties для ваших IBOutlets вместо объявления их в качестве переменных экземпляра. Это автоматически создаст методы setter &, резервное хранилище в памяти, а с XCode 4.4 оно автоматически добавит @synthesize, поэтому вам больше не нужно этого делать. Заявляя IBOutlets как «слабой» ссылка предотвращает сохранение циклов & утечку памяти, где вид имеет место на выходы & выходов держат на представление & никогда ничего не уходит, ...
View1Class.h
@interface ViewController : UIViewController
@property (nonatomic, weak) IBOutlet UIButton *buttonSelectTimeInterval;
@end
View2Class.h
@interface ViewController : UIViewController
@property (nonatomic, weak) IBOutlet UILabel *labelTimer;
@end
Чувак ее не работал. Потому что, когда вы пытались нажать кнопку из view_1, в это время свойства view_2 не назначаются. Еще одна вещь, которую вы можете открыть view_2 и view_2 viewWillAppear, вы можете назначить текст, который вы хотите установить. –