2

代码来自斯坦福 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)
4

1 回答 1

8

您可能在显示视图控制器之前设置了问题字符串属性,大概是在 prepareForSegue:? 此时,视图尚未加载,label 属性仍将为 nil。

通过拥有一个单独的字符串属性来做正确的事情,您只是错过了还必须在 viewDidLoad 中设置标签文本的步骤 - 此时您的标签已从情节提要中实例化并准备好使用。

如果您在调用 viewDidLoad 之前设置属性,则预期标签为 nil。如果您从 prepareForSegue 设置属性,则视图还没有加载。视图控制器在需要在屏幕上显示它们之前不会加载它的视图和子视图,并且在执行 segue 之前不会发生这种情况 - 正如您可以猜到的那样,prepareForSegue 是在执行 segue 之前完成的。

于 2012-07-30T18:50:29.923 回答