2012-07-06 51 views
0

我即將開始一個新的IOS項目,我將使用核心數據作爲存儲最終用戶數據的主要手段。我在應用程序的規劃階段遇到了一個問題,那就是如何去保存,加載和刪除核心數據對象。下面是我能想到的三種可能的方法:

方法1
創建應用程序代理,我將使用UISharedApplication方法檢索到每個視圖控制器的通用數據對象。這意味着當應用程序啓動時,它將創建一個Getters和Setters對象。
方法2
創建數據模型的類(的NSObject子類)並初始化,在每一個視圖控制器。這意味着每個視圖控制器必須擁有它自己的NSManagedObjectContext(應用程序委託將在啓動時提供),它將在初始化時傳遞給數據模型類。這意味着在整個視圖控制器中,它將使用它自己的數據模型類並從中調用方法。
方法3
讓每個單獨的視圖控制器自行完成保存。例如一個-(IBAction)didAdd;將其中的所有代碼保存到數據庫。這樣可以更容易地進行高效的數據調用,因爲它可以基於視圖控制器(批量大小等)具有正確設置的NSFetchResultsController核心數據存儲,加載和刪除不同位置的數據

我不確定哪種方式是我最好的方式,如果您能告訴我哪種方法最好,或者如果哪種方法都不好,那麼最好的方法是做什麼。

回答

0

還有一個方法編號4,它類似於你的方法1:把你的數據訪問代碼放到一個模型類中,並使其成爲一個單例。這是在不同控制器之間共享模型狀態的標準方式。將所有數據管理代碼放入單例模型中可幫助您避免代碼重複。

+0

這是完美的。我沒有想到那個。 singleton類可能返回一個NSFetchedResultsController嗎?這不會導致任何問題,是嗎?另外,我將如何設置單例類的NSManagedObjectContext? – CoreCode 2012-07-06 02:34:13

+0

@CoreCode是的,單身人士可以擁有/管理/返回一個或多個'NSFetchedResultsController'對象;這不應該導致問題。至於設置'NSManagedObjectContext',很可能你想在你的單例的指定初始化器中設置它。 – dasblinkenlight 2012-07-06 02:52:35

+0

最好的方法是使用UISharedApplication方法還是直接從文件加載NSManagedObjectContext? – CoreCode 2012-07-06 03:13:37