IBOutlet在自定义UIView中是零(使用STORYBOARD)

pad*_*apa 19 objective-c storyboard uiview iboutlet

我有一个自定义UIView类.在里面我宣布了一个 IBOutlet属性UIImageView.

#import <UIKit/UIKit.h>

@interface SettingItem : UIView{

}

@property (strong, nonatomic) IBOutlet UIImageView *myImage;

@end
Run Code Online (Sandbox Code Playgroud)

现在我正在使用故事板.有一个viewcontroller.我拖到UIView了viewcontroller.我拖了一个UIImageView作为上面的子视图UIView.我将"SettingItem"类设置UIView为storyboard.我通过SettingItem从实用程序窗口的出口正常拖动将插座连接到myImage .


SettingItem 履行

#import "SettingItem.h"

@implementation SettingItem

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self baseInit];
    }
    return self;
}

-(id) initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code
        [self baseInit];
    }
    return self;
}

- (void) baseInit{
    NSLog(@"myImage %@"self.myImage);
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end
Run Code Online (Sandbox Code Playgroud)

现在我的问题myImage始终是nil,NSLog只需打印(null)插座.我检查了故事板中的视图并检查了它的出口参考及其指向myImage.我错过了什么.我用谷歌搜索帮助但找不到任何解决方案.

你能指出我做错了什么吗?

Oli*_*gey 72

在视图中覆盖awakeFromNib - 这是在分配IBOutlet之后调用的第一个生命周期方法,并且是您的代码的正确位置.

  • 简短:这是唯一正确的答案,其他应该被包裹在铅封中并送到太空.Long:哦,我希望当我要问任何关于SO的事情时,会有像@Oly这样的人提供唯一合理和正确的答案.其他答案是如此垃圾,它只是表明缺乏必要的知识.请更像Oly,而不是像这个帖子中的其他人一样. (5认同)
  • 在awakefromNib中,它仍然获取空值,我在stackoverflow上搜索了很多东西,并且我在许多链接上得到的答案是内容是延迟加载的,所以在awakefromnib中,你可以让iboutlets值为null (4认同)
  • @MANIAK_dobrii 你刚刚让我的一天高兴起来,我去年经历了一场可怕的事故后刚刚回到工作岗位,需要一些鼓励;-) (2认同)