繁体   English   中英

如何与多个控制器共享模型?

[英]How to share a model with multiple Controller?

我有一个第一个UISplitViewController,其中(默认是)另外两个View Controller作为子级,对于其中一个,还有另一个View Controller作为子级(同样是默认值)。

我的问题是,业务逻辑使用的模型(基本上是一个类)是在AppDelegate中创建的,我想在每个控制器中使用它。

我尝试使用viewDidLoad方法将模型传递给所有控制器,但该方法在最后一个子级中调用,然后通过层次结构树到达SplitViewController。

我想满足的两个约束是:

  • 我不想使用单身人士
  • 我不希望我的所有控制器都知道AppDelegate

有没有办法做到这一点?

如果由于任何原因不想使用单例,则可以通过这些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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM