gpt4 book ai didi

ios - 如何在初始化期间将值从子类传递到父类(super class)

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

假设,我有两个 View Controller 。 ViewController1 是 ViewController2 的子类。从子类(ViewController1)中,我调用了父类(super class) init 方法并通过参数传递了一个值并将该值分配给了父类(super class)变量。但在父类(super class)(ViewController2)的 viewDidLoad 方法中,该值始终为 null。为什么 ?如何将该值从 sub 传递到 super 以便我可以在父类(super class)的 viewDidLoad 方法中获取该值?

ViewController1.h

@interface ViewController : ViewController2

@end

ViewController1.m

@implementation ViewController

- (instancetype)init
{
self = [super initWithName:@"Hello"];
if (self) {
NSLog(@"1 :");
}
return self;
}

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.


}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

ViewController2.h

@interface ViewController2 : UIViewController

@property (nonatomic, strong) NSString *name;
-(instancetype)initWithName:(NSString *)name;

@end

ViewController2.m

- (instancetype)initWithName:(NSString *)name
{
self = [super init];

if (self) {
self.name = name;
}

return self;
}

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.

NSLog(@"2 : %@", self.name);

}

@end

最佳答案

我厌倦了你的代码,但它工作得很好。我怀疑,您没有直接实例化您的 ViewController。你在你的项目中使用 Storyboard吗?如果是 - 您应该覆盖 ViewController 中的 initWithCoder:

但是,在 init 系列方法期间设置 View Controller 的任何属性是个坏主意。根据 Apple 的建议,所有自定义都应在 -viewDidLoad-viewWill/DidAppear 方法中完成。

如果您确实需要从外部设置name 属性,最好直接分配它,而不是通过将参数传递给init 方法。

还有一件事 - initWithNibName:bundle:指定的初始化程序。这意味着,您的子类最终必须在初始化链中调用它。

关于ios - 如何在初始化期间将值从子类传递到父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36006000/

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