Проблема здесь в том, что инициализатор фактически не загружает файл пера в память. Вместо этого загрузка пера задерживается до тех пор, пока ваше приложение не запросит свойство контроллера вида view
. Таким образом, свойство sign
вашего контроллера имеет нулевое значение, когда вы обращаетесь к нему.
Ручной запрос свойства view
контроллера заставит ваш пример работать ...
BoyController *boyViewController = [[BoyController alloc] initWithNibName:@"BoyView" bundle:nil];
[boyViewController view]; // !!!: Calling [... view] here forces the nib to load.
NSString *newText = [astrology getSignWithMonth:month withDay:day];
boyViewController.sign.text = newText;
// and so on...
Однако я думаю, что вы действительно пытаетесь создать и настроить свой контроллер представления, прежде чем освободить его для выполнения своих собственных задач. (Возможно, чтобы отобразить это модально, скажем.) Ручной вызов [... view]
не будет долгосрочным решением.
Лучше установить отдельное свойство в вашем контроллере представления для текста метки, а затем реализовать viewDidLoad
, чтобы присвоить его метке:
@interface BoyViewController : UIViewController {
IBOutlet UILabel *label;
NSString *labelText;
}
@property(nonatomic, copy)NSString *labelText;
@end
@implementation
@synthesize labelText;
- (void)viewDidLoad
{
[label setText:[self labelText]];
}
// and so on...
@end
Это дает дополнительное преимущество, так как текст метки сбрасывается в случае очистки представления во время события нехватки памяти.