没有Storyboards
我过去常常将Data Model
分配给View Controller
,并将此代码分配到 AppDelegate 的didFinishLaunchingWithOptions
中:
//Data Model Class
DataModel *model=[[DataModel alloc] init];
// TableViewController
Controller *controller=[[Controller alloc] initWithModel:model style:UITableViewStylePlain];
self.window.rootViewController=controller;
view Controller
的 initWithModel 方法:
-(id)initWithModel:(SBQAllReadersModel *) aModel
style:(UITableViewStyle) aStyle{
if (self=[super initWithStyle:aStyle])
{
_model=aModel;
}
return self;
}
但Storyboards
我无法做到:
//Data Model Class
DataModel *model=[[DataModel alloc] init];
UIStoryboard *mainStoryboard = [UIStoryboardstoryboardWithName:@"MainStoryboard" bundle: nil];
Controller *controller = [mainStoryboard instantiateViewControllerWithIdentifier:@"Controller"];
controller.model=model;
问题在于Storyboards
我无法使用init
的{{1}}方法,因为View Controller
无法识别它。我必须使用无法覆盖的Storyboard
,我无法将参数传递给initWithCoder:
。
您建议我将awakeFromNib
与data model
分配到Storyboards
的{{1}}?
非常感谢
答案 0 :(得分:3)
考虑到DataModel的分配方式,我认为第一个视图控制器中的懒惰getter是优越的(甚至是你原来的做法)。 e.g。
// in Controller.m private interface declare @property(strong,nonatomic) DataModel *dataModel, then...
- (DataModel *)dataModel {
if (!_dataModel) {
_dataModel = [[DataModel alloc] init];
}
return _dataModel;
}
答案 1 :(得分:0)
在我分配模型的initWithCoder
的{{1}}:中。
view controller
是的,它更好地使用你说的懒惰的吸气剂;)
那么我是否需要在-(id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super initWithCoder:aDecoder])
{
// Do something
_model=[[DataModel alloc] init];
}
return self;
}
中分配model
并将模型按rootViewControler
传递给需要使用它的下一个控制器?