簡體   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