6

我有一个视图控制器,其属性决定了它的行为。这些是由它的父级在 中设置的prepareForSegue

这在我的程序中引起的潜在错误是不能保证有问题的父级设置属性,所以我想要一个默认值。在研究中,我现在了解到 Objective C 中的属性没有默认值。这给我留下了以下选择:

  • viewDidLoad在子视图的方法中设置属性的默认值。但是,经过调查,在父级之后viewDidLoad调用- 所以当父级实际设置属性时,我会覆盖父级的值。 prepareForSegue
  • 然后我想我可以(id) init用来初始化这些值,但是,至少在使用情节提要时,根本不会调用这个方法!

我可能有一个解决方法,对象将初始化为默认值,但在这种情况下,我只想传入一个 BOOL。而且由于即使没有正确初始化布尔值也会有一些值,所以我无法测试它是否为非零。

prepareForSegue在父视图控制器之前是否有机会在子视图控制器中初始化值?

4

1 回答 1

7

重写init将无济于事,因为它不是UIViewController对象的指定初始化程序。当手动实例化视图控制器- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle被调用时,从情节提要加载时- (id)initWithCoder:(NSCoder *)decoder将被调用。如果要在初始化视图控制器时设置属性,则必须覆盖两个初始化程序。

在研究中,我现在了解到 Objective C 中的属性没有默认值。

他们是这样。nil对于对象,0对于整数值,0.0对于浮点数等。如果您需要除此之外的默认值,您应该在适当的 init 方法中设置它们。

于 2013-10-31T02:37:56.450 回答