2014-02-19 32 views
0

我有第一个UISplitViewController中至少有(并且它是默认的)两个其他视图控制器作为子项,其中一个有另一个视图控制器作为子项(同样是默认值)。如何与多个控制器共享模型?

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

我试图使用viewDidLoad方法来传递模型通过所有的控制器,但是这个方法在最后一个孩子中被调用,然后通过层次树到SplitViewController。

两个约束我想fullfill是:

  • 我不想用一个单
  • 我不希望我的所有控制器都知道的AppDelegate

有没有办法去做到这一点?

+0

是什么原因“我不希望使用一个单身” –

+0

我被要求限制在最低的依赖条件。 – Cratein

+0

我同意@GrzegorzKrukowski,单身人士实际上提供了一个简单的方法来启动一个类。你只需调用该方法,而不必每次都执行alloc/init – user2277872

回答

0

如果你不想使用singleton出于任何原因,你可以通过这些ViewControllers传递模型。只需为创建它们的每个ViewController创建自定义的initWithModel:方法并分层传递数据给它们。也许为它们创建一个基类以保持它的通用性。

对于故事板,您可以在创建ViewControllers之后在prepareForSeque方法中分配模型。

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

由于我使用了故事板,我不是自己调用init,我不知道故事板调用了哪个init方法。但是,如果我可以重写initWithModel方法,知道这将是由故事板调用的方法,它是完美的。 – Cratein

+0

@Cratein它一直在寻找越来越像单身解决方案...... – trojanfoe

+0

您可以将您的模型传递给prepareForSeque方法 –

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

+0

'dispatch_once()'是创建单例的首选方法。 – trojanfoe

+0

这可能是一个答案,但我想尝试另一种解决方案,然后再来单身解决方案 – Cratein

相关问题