Ios5 带有情节提要的viewController自定义初始化方法

Ios5 带有情节提要的viewController自定义初始化方法,ios5,uiviewcontroller,uistoryboard,Ios5,Uiviewcontroller,Uistoryboard,我在重写在情节提要中设计的CustomViewController的初始化方法时遇到问题 现在我正在做(在我的主视图控制器中): 我在viewDidLoad(CustomViewController)中有 这样行 但是,这是正确的方法吗?我应该向CustomViewController添加自定义init方法(或重写)吗?像initWithObject:?我不知道如何调用我的自定义init方法,而不是UIStoryboard instanceeviewcontrollerwhithidentifi

我在重写在情节提要中设计的CustomViewController的初始化方法时遇到问题

现在我正在做(在我的主视图控制器中):

我在viewDidLoad(CustomViewController)中有

这样行

但是,这是正确的方法吗?我应该向CustomViewController添加自定义init方法(或重写)吗?像initWithObject:?我不知道如何调用我的自定义init方法,而不是
UIStoryboard instanceeviewcontrollerwhithidentifier:
,而且我没有收到对
init
initWithNibName
的调用

也许我应该使用:
-(id)initWithCoder:(NSCoder*)解码器

请给我一些建议


谢谢大家!

序列图像板中视图控制器的指定初始值设定项是
-initWithCoder:
。由于故事板中的大多数视图控制器都是通过segues创建的,因此通常会在
-prepareforsgue:sender:
期间看到状态设置

如果像您提供的示例中那样直接从故事板实例化视图控制器,那么您选择的模式是合适的。

作为解决此问题的另一个“解决方法”,您可以使用委派。创建一个协议,作为序列图像板中UIViewController子类的数据源。遵循此数据源协议,在加载UIViewController子类后立即实施并使用它:

required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        //invoke your data source here
    }

我知道。。。我也不喜欢这个,但是…;)

很高兴知道我在做应该做的事情!这是一个非常糟糕的设计,因为它使您在swift中使用Optionals(with!?),或者在开发人员忘记设置正确的变量时访问可能的nils。令人遗憾的是,这是一个“适当”的解决方案:关于这个问题的一个好消息来源,swift/objective c可选:只是为了回应@GuilhermeSilveira的评论,这个问题是从2012年开始的,当时公众甚至不知道swift,即使是,Objective-C和Swift的设计模式有很大不同,因此如果您使用Swift开发,您不应该坚持这种模式。对于从故事板加载的VC,Swift是否有一种模式可以避免选项或隐式打开选项?您做的一切都是正确的。您可以在自定义类中重写initWithCoder,即用于执行自定义初始化的_customViewController对象的类文件
    [self.label setText:self.myObject.someString];
required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        //invoke your data source here
    }