我正在创建一个viewController的实例,然后尝试设置它的属性文本,即UILabel。
BoyController *boyViewController = [[BoyController alloc] initWithNibName:@"BoyView" bundle:nil];
NSString *newText = [astrology getSignWithMonth:month withDay:day];
boyViewController.sign.text = newText;
NSLog(@" the boyviewcontroller.sign.text is now set to: %@", boyViewController.sign.text);
[newText release];
我尝试了这个,但它没有用......
所以我尝试了以下内容:
BoyController *boyViewController = [[BoyController alloc] initWithNibName:@"BoyView" bundle:nil];
UILabel *newUILabel = [[UILabel alloc] init];
newUILabel.text = [astrology getSignWithMonth:month withDay:day];
boyViewController.sign = newUILabel;
NSLog(@" the boyviewcontroller.sign.text is now set to: %@", newUILabel.text);
[newUILabel release];
但无济于事..
我不知道为什么我不能在boyViewController中设置UILabel“sign”的text属性..
答案 0 :(得分:6)
这里的问题是初始化程序实际上并没有将nib文件加载到内存中。相反,加载nib会延迟,直到您的应用程序请求视图控制器的view
属性。因此,当您访问它时,控制器的sign
属性为null。
手动请求控制器的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
如果在低内存事件期间清除视图,则还可以重置标签文本。
答案 1 :(得分:1)
您是否在Interface Builder上绑定了您的商店?
您似乎需要将第一个示例的符号插件绑定到Interface Builder中,以便将该文本实际设置为您想要的任何内容。
在Interface Builder中将插座绑定到实际的UI组件后,您应该可以执行以下操作:
NSString *newText = [astrology getSignWithMonth:month withDay:day];
[[boyViewController sign] setText:newText];
This是您需要了解的关于绑定的内容。
你的第二个例子对我来说根本没有意义。