viewDidLoad在实例变量给定值之前运行

时间:2011-09-28 00:22:08

标签: iphone ios cocoa-touch

我所拥有的是一个广告类,它具有一个将接收横幅网址的实例变量:

@interface Advertisement : UIViewController {

}


@property (nonatomic, retain) NSString *image;

现在,在我的app委托中,我正在初始化广告类,并为实例变量“image”提供值。

   //setup the ad
    Advertisement *theAdView = [[Advertisement alloc] init];
    theAdView.view.frame = CGRectMake(0.0, self.window.frame.size.height-120.0, 320.0, 76.0);
    theAdView.view.clipsToBounds = YES;
    theAdView.view.tag = AD_TAG;
    NSLog(@"Added the image");
    theAdView.image = theAd.banner;
    theAdView.nid = theAd.nid;
    [self.window addSubview:theAdView.view];
    [self.window bringSubviewToFront:theAdView.view];     

在广告类'viewDidLoad方法中,我想要“图像”的值。但是我得到一个空值。因此,在有机会获得实例变量之前,类似乎正在初始化。

我想我之前找到了一个解决方案,但我不记得到底是什么。我认为它与设置另一个不使用的变量(非原子,保留)有关...我不确定。

1 个答案:

答案 0 :(得分:3)

当你试图访问它的'view'属性时,UIViewController将加载它的视图(从nib或调用loadview方法,如果你覆盖它)。在你的情况下,一个简单的结果就是移动线

theAdView.image = theAd.banner;
theAdView.nid = theAd.nid;

到访问view属性的任何东西之前,比如

 theAdView.view.frame = CGRectMake(0.0, self.window.frame.size.height-120.0, 320.0, 76.0);

或者更好的方法是接受图像和nid作为新初始化程序中的属性