1

setProgramandsetGraphicメソッドには、同じコードがあります。

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

しかし、出力は、 self.display が ではnullsetProgramあるが、 ではUILable オブジェクトであることを示していますsetGraphic

異なる結果の原因は何ですか? displayIBOutlet であり、programNSArray オブジェクトです。がSOGraphicViewControllerprogramのモデルですが、 で別のコントローラーからプログラムの値を渡します[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 のロード中に呼び出され、その間に設定displayされ、設定されていると推測されます。programgraphic

つまり、XIB がアーカイブ解除されると、オブジェクトが再構成されるときにセッターが呼び出されます。順番は未定です。

(これは私を面白がらせました。23年ほど前にNIBのロードについて最初に学んだとき、同じ混乱に遭遇しました.ところで:あなたは私の芝生から降りることができます.)

アウトレットなので、電話する必要はありませんsetNeedsDisplay。実際、セッターをオーバーライドするべきではありません。

また、クラス名は常に大文字で始まります。

于 2013-09-01T16:36:30.913 に答える