子类 awakeFromNib 调用超类自定义 init/setup 方法?
Subclass awakeFromNib to call a superclass custom init/setup method?
我有一个 3rd-party UIViewController
,它被设计为仅使用 -(id)initWithURL:(NSURL*)url
进行初始化。没有声明其他 init
系列方法。我想将其子类化以与 Storyboard 一起使用,因此会自动调用 [super initWithURL:[NSURL URLWithString:@"about:blank"]]
之类的东西。撇开设计模式不谈,这只是大谈特谈的目标。
我已经在子类中试过了,但没有用:
- (void)awakeFromNib {
[super awakeFromNib];
if ([super respondsToSelector:@selector(initWithUrl:)]) {
[super performSelector:@selector(initWithUrl:) withObject:[NSURL URLWithString:@"about:blank"]];
}
}
上面给出了关于保留对象的选择器的编译器错误。现在,超类 initWithURL:
就是这个
- (id)initWithUrl:(NSURL *)url {
// Set url and init views
_url = url;
[self setup];
return self;
}
所以我尝试从awakeFromNib
调用[super performSelector:@selector(setup)]
,但是当然不能从子类设置私有变量_url。我怎样才能完成这个以供 Storyboard 使用?
您需要覆盖 UIViewController 子类中的 initWithCoder:
init 方法。这样您就可以在创建 UIViewController 时 return 一个不同的实例。
- (instancetype)initWithCoder:(NSCoder *)decoder
{
self = [super initWithURL:[NSURL URLWithString:@"about:blank"]];
return self;
}
一些关于如何从故事板初始化对象的额外阅读:Responding to Being Loaded from a Nib File
我有一个 3rd-party UIViewController
,它被设计为仅使用 -(id)initWithURL:(NSURL*)url
进行初始化。没有声明其他 init
系列方法。我想将其子类化以与 Storyboard 一起使用,因此会自动调用 [super initWithURL:[NSURL URLWithString:@"about:blank"]]
之类的东西。撇开设计模式不谈,这只是大谈特谈的目标。
我已经在子类中试过了,但没有用:
- (void)awakeFromNib {
[super awakeFromNib];
if ([super respondsToSelector:@selector(initWithUrl:)]) {
[super performSelector:@selector(initWithUrl:) withObject:[NSURL URLWithString:@"about:blank"]];
}
}
上面给出了关于保留对象的选择器的编译器错误。现在,超类 initWithURL:
就是这个
- (id)initWithUrl:(NSURL *)url {
// Set url and init views
_url = url;
[self setup];
return self;
}
所以我尝试从awakeFromNib
调用[super performSelector:@selector(setup)]
,但是当然不能从子类设置私有变量_url。我怎样才能完成这个以供 Storyboard 使用?
您需要覆盖 UIViewController 子类中的 initWithCoder:
init 方法。这样您就可以在创建 UIViewController 时 return 一个不同的实例。
- (instancetype)initWithCoder:(NSCoder *)decoder
{
self = [super initWithURL:[NSURL URLWithString:@"about:blank"]];
return self;
}
一些关于如何从故事板初始化对象的额外阅读:Responding to Being Loaded from a Nib File