代码来自斯坦福大学CS193p。我添加了一个 NSLog 来查看。标签似乎没有被初始化。任何想法?
@interface AskerViewController() <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UILabel *questionLabel;
@property (weak, nonatomic) NSString *question;
@end
@implementation AskerViewController
@synthesize questionLabel = _questionLabel;
@synthesize question = _question;
- (void)setQuestion:(NSString *)question
{
_question = question;
self.questionLabel.text = question;
NSLog(@"label is %@", self.questionLabel);
}
@end
NSLog 结果是:
2012-07-31 01:56:45.177 Kitchen Sink[23931:f803] label is (null)
您可能在显示视图控制器之前设置问题字符串属性,大概是在prepareForSegue:?此时,视图尚未加载,label 属性仍为 nil。
你正在做的是拥有单独的字符串属性是正确的事情 http://oleb.net/blog/2012/02/passing-data-between-view-controllers/,您只是错过了还必须在 viewDidLoad 中设置标签文本的步骤 - 此时您的标签已从故事板实例化并可供使用。
如果您在调用 viewDidLoad 之前设置属性,则预计标签为零。如果您从prepareForSegue 设置属性,则视图尚未加载。视图控制器不会加载它的视图和子视图,直到需要在屏幕上显示它们,并且直到执行 segue 时才会发生这种情况 - 正如您可以猜到的,prepareForSegue 在执行 segue 之前完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)