viewController与故事板的自定义init方法

即时通讯有困难重写我的Storyboard中devise的CustomViewController的初始化方法。

现在即时通讯(在我的mainViewController):

self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"]; self.customViewController.myObject = someObject; 

我有viewDidLoad(CustomViewController)

  [self.label setText:self.myObject.someString]; 

这工作正常。

但是,这是正确的方法吗? 我应该添加一个自定义的init方法(或覆盖)到我的CustomViewController? 像initWithObject:? 我不知道如何调用我的自定义init方法而不是UIStoryboard instantiateViewControllerWithIdentifier:而我没有得到调用initinitWithNibName

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

请给我一些build议!

谢谢!

故事板中视图控制器的指定初始化程序是-initWithCoder: 由于故事板中的大多数视图控制器都是通过segse创build的,所以在-prepareForSegue:sender:通常会看到状态设置。

如果您直接从故事板实例化视图控制器(如您提供的示例),那么您select的模式是适当的。

作为此问题的另一个“解决方法”,您可以使用委派。 创build一个协议,作为故事板中的UIViewController子类的数据源。 遵循这个数据源协议,在加载你的UIViewController子类之后执行它并使用它:

 required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) //invoke your data source here } 

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