【发布时间】:2016-03-09 11:45:29
【问题描述】:
您好,我创建了 UIView 子类 MightyPickerView,它像这样从 xib 加载。
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"MightyPickerView" owner:self options:nil];
if ([arrayOfViews count] < 1) {
return nil;
}
if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[MightyPickerView class]]) {
return nil;
}
self = [arrayOfViews objectAtIndex:0];
}
return self;
}
到目前为止,这很好用,我在以前的许多项目中也使用过它,没有任何问题。但现在我想创建名为TimePickerView 的 MightyPickerView 的子类。
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame]; // here's the problem
if (self) {
[self setupSizes];
}
return self;
}
当我运行应用程序时它崩溃了
[MightyPickerView setupSizes]: unrecognized selector sent to instance 0x137e53660
问题是这行self = [super initWithFrame:frame]; 返回的是 MightyPickerView 而不是 TimePickerView。
我应该如何编写 MightyPickerView 的初始化器,以便它在需要时返回子类。
【问题讨论】:
-
你的 MightyPickerView.xib 中没有 TimePickerView 的出口吗?
-
TimePickerView 不是 MightyPickerView 的属性。它是 MightyPickerView 的子类。 MightyPickerView 不应该对 TimePickerView 有任何了解。
-
而不是超级初始化。你可以试试 [[self alloc] init] 吗?
-
抱歉这个错误。为了简单起见,我用较短的类名更改了类名。我在错误消息中打错了字。所以我没有在
TimePickerView内部实现了TimePickerView和setupSizes是。
标签: ios objective-c iphone uiview subclass