如何与多个Controller共享模型?

时间:2014-02-19 15:48:28

标签: ios objective-c model-view-controller

我有一个第一个UISplitViewController,它有(并且它是默认的)另外两个视图Controller作为子节点,其中一个有另一个视图控制器作为子节点(同样它是默认的)。

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

我尝试使用viewDidLoad方法将模型传递给所有控制器,但是在最后一个子节点中调用此方法,然后通过分层树到SplitViewController。

我想要满足的两个限制是:

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

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您因任何原因不想使用单例,则可以通过这些ViewControllers传递模型。只需为您创建的每个ViewControllers创建自定义initWithModel:方法,并按层次结构向其传递数据。也许为所有人创建一个基类来保持它的共同点。

对于storyboard,您可以在创建ViewControllers后立即在prepareForSeque方法中指定模型。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
     if([[segue identifier] isEqualToString:@"myViewController"])
     {
         [segue.destinationViewController setModel:self.model];
     }
}

答案 1 :(得分:0)

这可能是一个答案:

.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