我有一个第一个UISplitViewController,它有(并且它是默认的)另外两个视图Controller作为子节点,其中一个有另一个视图控制器作为子节点(同样它是默认的)。
我的问题是,业务逻辑使用的Model基本上是一个类,它是在AppDelegate中创建的,我想在每个控制器中使用它。
我尝试使用viewDidLoad方法将模型传递给所有控制器,但是在最后一个子节点中调用此方法,然后通过分层树到SplitViewController。
我想要满足的两个限制是:
有没有办法解决这个问题?
答案 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