[英]How to share a model with multiple Controller?
我有一个第一个UISplitViewController,其中(默认是)另外两个View Controller作为子级,对于其中一个,还有另一个View Controller作为子级(同样是默认值)。
我的问题是,业务逻辑使用的模型(基本上是一个类)是在AppDelegate中创建的,我想在每个控制器中使用它。
我尝试使用viewDidLoad方法将模型传递给所有控制器,但该方法在最后一个子级中调用,然后通过层次结构树到达SplitViewController。
我想满足的两个约束是:
有没有办法做到这一点?
如果由于任何原因不想使用单例,则可以通过这些ViewController传递模型。 只需为创建的每个ViewController创建自定义initWithModel:方法,然后将数据分层传递给它们。 也许为所有人创建一个基类以保持通用性。
对于情节提要,您可以在创建ViewControllers之后立即在prepareForSeque方法中分配模型。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"myViewController"])
{
[segue.destinationViewController setModel:self.model];
}
}
那可能是一个答案:
在.h
:
+(MyModel *)shared;
在.m
:
static MyModel *myModel;
@implementation MyModel
+(MyModel *) shared{
if (nil != myModel) {
return myModel;
}
static dispatch_once_t pred;
dispatch_once(&pred, ^{
myModel = [[MyModel alloc] init];
});
return myModel;
}
这样,您可以在应用程序的任何位置访问模型。
希望对您有所帮助!
编辑:添加dispatch_once
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.