使用Storyboard将数据模型分配给appDelegate中的View Controller - ios

时间:2013-12-20 23:43:41

标签: ios storyboard uistoryboard appdelegate

没有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:

您建议我将awakeFromNibdata model分配到Storyboards的{​​{1}}?

非常感谢

2 个答案:

答案 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传递给需要使用它的下一个控制器?