为什么awakeFromNib中的控件(null)?

时间:2010-04-28 12:27:09

标签: iphone objective-c cocoa-touch

这是关于为什么我无法在awakeFromNib中设置UIControl的另一个问题的后续内容。答案是,正如您在下面看到的那样,awakeFromNib中的控件是零,尽管在我们到达viewDidLoad时它们已初始化为正确的对象。我设置的视图与以往一样,如果我在这里进行不同的操作,可以使用当前版本的Image Builder设计和保存xib(nib)。

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];
}

输出:

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

非常感谢...

加里

3 个答案:

答案 0 :(得分:1)

iboutlet连接到控件,它是view

的子视图

view延迟加载

所以你可以先访问它,如下所示:

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

答案 1 :(得分:0)

例如,如果ViewController的View是从另一个NIB加载的,则会发生这种情况。这些连接只有在实际加载NIB时才会被初始化和修复,因为它们实际上并不存在实际实例化并且首先唤醒控制器的NIB。

答案 2 :(得分:0)

您可以获得有关here

的更多信息