2013-02-21 85 views
1

因此,我對自己的數據在哪裏以及它存儲在應用程序中的位置感到困惑。這不是一個具體的問題,所以希望有人能提供一個通用的答案。混淆對象的類方法實例上的運行方法

我需要在幾個UIViewController實例之間傳遞一些數據,而我目前正在使用稱爲我的dataManager的單例對象執行此操作。這個類有一個方法,一個叫+ (LCDataManager *) sharedDataManager的類方法,該方法基本上檢查sharedDataManager是否已經存在,如果是,返回它,如果沒有,創建它並設置它的變量。這意味着我可以在任何我喜歡的地方引用該類,從多個類中訪問和修改其變量的任何位置。

第一個問題:這是像這樣傳遞數據的正確/最好/最合適的方法嗎?我希望它遵守MVC,感覺就像它一樣,我希望我是對的。

第二個問題:如果我想在該類中放入實例方法,並在類方法中調用它,該怎麼辦?假設我的sharedDataManager需要調用一個方法來抓取某些對象的某個變量(一個數組),然後將它們放入另一個數組中,然後再將其發回。我不能這樣做,我可以嗎?那是什麼方式?如果我創建了該類的一個實例(而不是使用共享實例),我就失去了在多個viewController中使用該實例的能力。

我感到非常困惑,好像它不是我正在做的問題。欣賞任何指導,最好不要說「閱讀蘋果文檔」的東西 - 他們寫就好像你已經知道你在做什麼,坦率地說我還沒有。

回答

3

第一個問題:這是正確的/最好/最合適的周圍傳遞數據這樣的手段?我希望它遵守MVC,感覺就像它一樣,我希望我是對的。

您的設計完全符合MVC標準。

第二個問題:如果我想在該類中放置一個實例方法,並在類方法中調用它,該怎麼辦?

你一定能定義一個實例方法,並調用它像這樣:

[[MyModelClass sharedModel] myInstanceMethod]; 

確實,[MyModelClass sharedModel]會給你一個實例MyModelClass(應guaranted是唯一被它一單)。

如果你想從sharedModel類方法調用實例方法,你也可以這樣做,因爲sharedModel擁有對你的單例的引用,所以它可以發送消息給它。

0

這個開發架構沒有問題,它是iOS開發中必須使用的(我認爲)。在IOS Programming: The Big Nerd Ranch Guide這本書中,他們稱之爲Model View Controller Store

關於你的第二個問題,是的,你可以聲明實例方法,然後從你的sharedDataManager調用。通常不會創建單例類的其他實例,但這是可能的。

3

這是正確/最好/最恰當的方式來傳遞數據嗎?

只有一個LCDataManager實例,但使用Singleton模式has potential problems沒什麼問題。另一種方法是初始化一個LCDataManger並將其傳遞到需要的地方。

如果我想在該類中放置一個實例方法,並在類方法中調用它,該怎麼辦?

訪問者+ (LCDataManager *) sharedDataManager應該只返回實例。我猜你想要的東西是一樣的東西

+ (LCDataManager *)preparedDataManager { 
    LCDataManager *shared = [self sharedDataManager]; 
    [shared doSomeInstanceMagic]; 
    return shared; 
} 

- (void)doSomeInstanceMagic { 
    // magic! 
    // grab some objects one of its variables (an array), 
    // and put them in another array 
} 
1

Matthijs Hollemans對他如何正確的方法,使博客優良的三部分教程你的視圖控制器互相交談:

+0

這是一套很好的教程,謝謝。 – Luke 2013-02-21 16:46:28

+0

@lukech不客氣。請注意,在Stack Overflow上表達感謝的通常方式是投票。 – 2013-02-21 19:13:47