viewController与storyboard的自定义init方法

Nic*_*s S 50 uiviewcontroller ios5 uistoryboard

我无法覆盖我的Storyboard中设计的CustomViewController的初始化方法.

现在我正在做(在我的mainViewController中):

self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"];
self.customViewController.myObject = someObject;
Run Code Online (Sandbox Code Playgroud)

我在viewDidLoad(CustomViewController)

    [self.label setText:self.myObject.someString];
Run Code Online (Sandbox Code Playgroud)

这没问题.

但是,这是正确的方法吗?我应该在CustomViewController中添加自定义init方法(或覆盖)吗?像initWithObject:?我不知道如何调用我的自定义init方法UIStoryboard instantiateViewControllerWithIdentifier:,而不是调用init也不是initWithNibName.

也许我应该使用:- (id)initWithCoder:(NSCoder *)decoder.

请给我一些建议!

谢谢!

ret*_*unt 58

故事板中视图控制器的指定初始化程序是-initWithCoder:.由于故事板中的大多数视图控制器都是通过segue创建的,因此您通常会看到状态集-prepareForSegue:sender:.

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

  • 这是一个非常糟糕的设计,因为如果开发人员忘记设置正确的变量,它会让你在swift(使用!?)中使用Optionals或访问可能的nils.令人遗憾的是,这是"适当的"解决方案:这个问题的一个很好的来源,swift/objective c可选:http://www.objc.io/issue-16/power-of-swift.html (2认同)