iOS - 加载xib并分配对象

时间:2014-07-15 13:38:02

标签: ios uiview xib

我想知道当我这样做时是否有人知道我为什么会收到错误:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"LoadingScreen" owner:self options:NULL];
        self = [nib objectAtIndex:0];
        self.spinner = [self.subviews objectAtIndex:1];
        self.loadingLabel = [self.subviews objectAtIndex:2];
        self.shortDescLabel = [self.subviews objectAtIndex:3];
    }
    return self;
}


-(void)awakeFromNib
{

    self.loadingLabel.font = [UIFont fontWithName:@"OpenSans-Regular" size:20];
    self.shortDescLabel.font = [UIFont fontWithName:@"FaunaOne-Regular" size:18];
}

我收到了这个错误:

2014-07-15 09:32:49.431 [4625:90b] - [UIView setSpinner:]:无法识别的选择器发送到实例0x10d02b350

2 个答案:

答案 0 :(得分:0)

看起来self被解释为UIView,而不是此行上的自定义视图:

self.spinner = [self.subviews objectAtIndex:1];

这一行向UIView询问“spinner”属性,它没有。因此,导致您的错误。您需要在NIB中设置自定义类,以便将其解释为自定义视图而不是UIView

enter image description here

答案 1 :(得分:0)

 NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"LoadingScreen" owner:self options:NULL];
 self = [nib objectAtIndex:0];

通过这样做,您可以从Xib文件中获取最顶层对象来初始化自我。

  

[UIView setSpinner:]:无法识别的选择器发送到实例0x10d02b350

从错误中可以清楚地看到,在加载xib时,您将获得UIView而不是YourCustomView。因此,您可能不会 将视图的类设置为Xib文件中的YourCustomView 。检查界面中是否有自定义视图的类名。