[英]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.