2013-12-20 41 views
1

沒有Storyboards我用來與該代碼在didFinishLaunchingWithOptions的AppDelegate中分配Data ModelView Controller分配數據模型視圖控制器中的appDelegate與故事板 - IOS

//Data Model Class 
DataModel *model=[[DataModel alloc] init]; 

// TableViewController 
Controller *controller=[[Controller alloc] initWithModel:model style:UITableViewStylePlain]; 

self.window.rootViewController=controller; 

initWithModel的方法view Controller

-(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我不能使用View Controllerinit方法,因爲它沒有爲Storyboard認可。我必須使用initWithCoder:,它不能被覆蓋,我不能將參數傳遞給awakeFromNib

你有什麼建議我將data modelStoryboards分配到ControllersappDelegate

非常感謝您

回答

3

鑑於數據模型的分配方式,我覺得一個懶惰的吸氣劑在第一視圖控制器優於(即使你做的舊的方式)。例如

// in Controller.m private interface declare @property(strong,nonatomic) DataModel *dataModel, then... 

- (DataModel *)dataModel { 
    if (!_dataModel) { 
     _dataModel = [[DataModel alloc] init]; 
    } 
    return _dataModel; 
} 
+0

謝謝!請看我的答案。 – santibernaldo

0

initWithCoder:在view controller我分配模型。

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    if(self = [super initWithCoder:aDecoder]) 
    { 
     // Do something 
     _model=[[DataModel alloc] init]; 
    } 
    return self; 
} 

沒錯其更好地使用延遲吸氣你說;)

所以纔有我分配在rootViewControlermodeldelegation模型傳遞給需要使用它的下一個控制器?

相關問題