2010-04-28 74 views
0

這是關於爲什麼我不能在awakeFromNib中設置UIControls的另一個問題的後續內容。答案是,正如你在下面看到的那樣,控制在awakeFromNib中沒有,儘管在我們到達viewDidLoad時它們被初始化爲正確的對象。我將視圖設置爲和往常一樣,如果我在這裏執行不同的操作來訪問它們,xib(nib)就是用當前版本的Image Builder設計和保存的。爲什麼awakeFromNib中的控件(null)?

CODE:

@interface iPhone_TEST_AwakeFromNibViewController : UIViewController { 
    UILabel *myLabel; 
    UIImageView *myView; 
} 
@property(nonatomic, retain)IBOutlet UILabel *myLabel; 
@property(nonatomic, retain)IBOutlet UIImageView *myView; 
@end 

@synthesize myLabel; 
@synthesize myView; 

-(void)awakeFromNib { 
    NSLog(@"awakeFromNib ..."); 
    NSLog(@"myLabel: %@", [myLabel class]); 
    NSLog(@"myView : %@", [myView class]); 
    //[myLabel setText:@"AWAKE"]; 
    [super awakeFromNib]; 

} 

-(void)viewDidLoad { 
    NSLog(@"viewDidLoad ..."); 
    NSLog(@"myLabel: %@", [myLabel class]); 
    NSLog(@"myView : %@", [myView class]); 
    //[myLabel setText:@"VIEW"]; 
    [super viewDidLoad]; 
} 

OUTPUT:

awakeFromNib ... 
myLabel: (null) 
myView : (null) 
viewDidLoad ... 
myLabel: UILabel 
myLabel: UIImageView 

非常感謝......

加里

回答

0

這可能發生,例如,如果該視圖控制器的觀點是從另一個NIB加載。這些連接只有在NIB實際加載時才被初始化和修復,因爲它們不存在於實際實例化並喚醒控制器的NIB中。

0

你可以得到關於here

1

IBOutlet中的詳細信息是連接來控制,這是的view

子視圖和view懶加載

因此你可以首先訪問它類似如下:

func awakeFromNib() { 
    super.awakeFromNib() 
    let _ = self.view 
    println("\(self.myLabel)") 
}