Ios 在drawRect方法中,IBOutlet为零

Ios 在drawRect方法中,IBOutlet为零,ios,uiview,drawrect,null,iboutlet,Ios,Uiview,Drawrect,Null,Iboutlet,我有一个UIView子类,带有一个名为RoundedImageView的xib,它只实现drawRect方法。xib包含一个带有插座的AsyncImageView(它是UIImageView的子类)。此RoundedImageView是自定义表格视图单元格的一部分。在此单元格的awakeFromNib方法中,RoundedImageView不是nil,而是AsyncImageViewoutlet是nil。发生这种情况的原因以及如何解决此问题?在聊天室中与OP讨论后,问题是表单元格/Rounded

我有一个UIView子类,带有一个名为
RoundedImageView
的xib,它只实现drawRect方法。xib包含一个带有插座的
AsyncImageView
(它是
UIImageView
的子类)。此
RoundedImageView
是自定义表格视图单元格的一部分。在此单元格的
awakeFromNib
方法中,
RoundedImageView
不是nil,而是
AsyncImageView
outlet是nil。发生这种情况的原因以及如何解决此问题?

在聊天室中与OP讨论后,问题是表单元格/
RoundedImageView
位于一个nib中,而
RoundedImageView
AsycImageView
位于另一个nib中。解决方案是从单元格中移除
RoundedImageView
,并将其nib加载到单元格的
awakeFromNib
方法中:

@implementation InviteFriendsImageVIew

- (void)awakeFromNib
{
    UINib *imageViewNib = [UINib nibWithName:@"RoundedImageView" bundle:nil];
    RoundedImageView *imageView = [imageViewNib instantiateWithOwner:nil options:nil][0];
    imageView.frame = // set frame here
    [self addSubView:imageView];
    self.roundedImageView = imageView;
}

您正在创建视图的某个实例,可能使用:

RoundedImageView *v = [[RoundedImageView alloc] initWithFrame:...];
这不使用NIB文件。您需要在NIB中加载以下内容:

UINib *nib = [UINib nibWithNibName:... bundle:nil];
NSArray *views = [nib instantiateWithOwner:... options:nil];
然后您可以获得
RoundedImageView
的实例,如下所示:

RoundedImageView *v = views[0];

您是否已将插座连接到xib文件中的对象?+是的,我已将插座连接到两个xib中。然后您没有从NIB加载视图-显示加载代码。因此,您的asyncImageView是roundedImageView的子视图,并且还作为插座连接到rounedImageView?这就是问题所在-我没有任何加载代码。我只是在视图实现中使用了drawRect,就这样。但是drawRect被调用了,所以我认为NIB已经加载了。AsyncImageView不在表视图单元格中。它位于表视图单元格中的RoundedImageView中。好的,RoundedImageView上的
AsyncImageView
出口也在吗?是的,它是连接的。如果右键单击nib中的
RoundedImageView
对象,可以看到连接在那里吗?如果右键单击文件的所有者,是否可以验证未建立连接?此外,是否可以发布单元格和
RoundedImageView
的代码?这将有助于确定是否发生了其他事情。