代码来自Stanford 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)
答案 0 :(得分:7)
您可能在显示视图控制器之前设置了问题字符串属性,可能是在prepareForSegue中:?此时,视图尚未加载,标签属性仍为零。
您正在执行right thing by having a separate string property,您只是错过了必须在viewDidLoad中设置标签文本的步骤 - 此时您的标签已从故事板中实例化并可以使用。
如果在调用viewDidLoad之前设置属性,则预期标签为nil。如果您要从prepareForSegue设置属性,则视图将不会被加载。视图控制器不会加载它的视图和子视图,直到它需要在屏幕上显示它们,并且直到执行segue时才会发生这种情况 - 正如你猜测的那样,prepareForSegue是在执行segue之前完成的。