使用 Storyboards 将数据模型分配给 appDelegate 中的视图控制器 - ios
Posted
技术标签:
【中文标题】使用 Storyboards 将数据模型分配给 appDelegate 中的视图控制器 - ios【英文标题】:Assign Data Model to View Controller in appDelegate with Storyboards - ios 【发布时间】:2013-12-20 23:43:40 【问题描述】:没有Storyboards
,我曾经在AppDelegate的didFinishLaunchingWithOptions
中使用此代码将Data Model
分配给View Controller
:
//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
中我不能使用View Controller
的init
方法,因为Storyboard
无法识别它。我必须使用它不能被覆盖的initWithCoder:
,并且我不能将参数传递给awakeFromNib
。
您建议我将data model
和Storyboards
从appDelegate
分配给Controllers
?
非常感谢
【问题讨论】:
【参考方案1】:鉴于 DataModel 的分配方式,我认为第一个视图控制器中的惰性 getter 是优越的(甚至比你以前的做法)。例如
// in Controller.m private interface declare @property(strong,nonatomic) DataModel *dataModel, then...
- (DataModel *)dataModel
if (!_dataModel)
_dataModel = [[DataModel alloc] init];
return _dataModel;
【讨论】:
谢谢!!请看我的回答。【参考方案2】:在view controller
的initWithCoder
: 中我分配了模型。
-(id)initWithCoder:(NSCoder *)aDecoder
if(self = [super initWithCoder:aDecoder])
// Do something
_model=[[DataModel alloc] init];
return self;
是的,最好使用你说的惰性吸气剂;)
那么我是否必须在rootViewControler
中分配model
并通过delegation
将模型传递给需要使用它的下一个控制器?
【讨论】:
以上是关于使用 Storyboards 将数据模型分配给 appDelegate 中的视图控制器 - ios的主要内容,如果未能解决你的问题,请参考以下文章
Sharepoint 2010 客户端对象模型 - 将列表数据分配给网格视图
SwiftUI + Combine:如何将数据分配给带有动画的模型