在setProgram
和setGraphic
方法中,我们使用相同的代码:
NSLog(@"%@", self.display);
但输出显示setProgram
中的self.display为 null ,但setGraphic
中的 UILable对象。
导致不同结果的原因是什么?display
是IBOutlet而program
是NSArray对象。虽然program
是SOGraphicViewController的模型,但我将通过[segue.destinationViewController setProgram: self.brain.program]
从另一个控制器传递程序的值。
@interface SOGraphicViewController ()
@property (nonatomic, weak) IBOutlet graphicView *graphic;
@end
@implementation SOGraphicViewController
@synthesize program = _program;
@synthesize graphic = _graphic;
@synthesize display = _display;
- (void)setProgram:(id)program {
_program = program;
[self.graphic setNeedsDisplay];
NSLog(@"%@", self.display);
}
- (void)setGraphic:(graphicView *)graphic {
_graphic = graphic;
self.graphic.dataSource = self;
NSLog(@"%@", self.display);
}
答案 0 :(得分:8)
假设您的属性都是IBOutlets
,那么最好的猜测是在XIB加载期间调用setter并在display
和program
之间设置graphic
被设定。
也就是说,由于XIB未归档,因此在重构对象时会调用setter。订单未定义。
(这让我很开心;当我第一次了解NIB装载时,我遇到了同样的困惑〜23年前。顺便说一下:你可以离开我的草坪。)
鉴于这些是出口,没有必要致电setNeedsDisplay
。实际上,你根本不应该覆盖setter。
此外,班级名称始终以大写字母开头。