gpt4 book ai didi

ios - 子类 awakeFromNib 调用父类(super class)自定义 init/setup 方法?

转载 作者:行者123 更新时间:2023-11-29 12:12:34 24 4
gpt4 key购买 nike

我有一个第 3 方 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"]];
}
}

上面给出了关于保留对象的选择器的编译器错误。现在,父类(super class)initWithURL:就是这个

- (id)initWithUrl:(NSURL *)url {
// Set url and init views
_url = url;
[self setup];
return self;
}

所以我尝试从awakeFromNib调用[super performSelector:@selector(setup)],当然不能从子类设置私有(private)变量_url .我怎样才能完成这个以供 Storyboard 使用?

最佳答案

您需要覆盖 UIViewController 子类中的 initWithCoder: init 方法。这样您就可以在创建 UIViewController 时返回不同的实例。

- (instancetype)initWithCoder:(NSCoder *)decoder
{
self = [super initWithURL:[NSURL URLWithString:@"about:blank"]];
return self;
}

一些关于如何从 Storyboard初始化对象的额外阅读:Responding to Being Loaded from a Nib File

关于ios - 子类 awakeFromNib 调用父类(super class)自定义 init/setup 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com