1

setProgramandsetGraphic方法中,我们有相同的代码:

NSLog(@"%@", self.display);  

但输出显示 self.display 在 中为空但在setProgram中是UILable 对象setGraphic

是什么导致了不同的结果?display是 IBOutlet 并且program是 NSArray 对象。虽然program是 SOGraphicViewController 的模型,但我将通过另一个控制器传递 program 的值[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);
}
4

1 回答 1

8

假设你的属性都是 all IBOutlets,那么最好的猜测是在 XIB 加载期间调用了 setter,并且设置display在两者之间。programgraphic

也就是说,当 XIB 未归档时,设置器会在对象被重构时被调用。订单未定义。

(这让我很开心;大约 23 年前,当我第一次了解 NIB 加载时,我遇到了同样的困惑。顺便说一句:你可以离开我的草坪。)

鉴于这些是网点,因此无需致电setNeedsDisplay. 实际上,您根本不应该覆盖设置器。

此外,类名总是以大写字母开头。

于 2013-09-01T16:36:30.913 回答