2011-10-20 27 views
0

什麼是訪問我managedObjectContext的最佳途徑。根據這post我不應該在finishedLoad:方法中這樣做。什麼時候叫的appdelegate的managedObjectContext

它是很好的做法,從我的任何應用程序的模型的訪問我managedObjectContext以這樣的方式。

(MyAppDelegate *)[[UIApplication的sharedApplication]委託])managedObjectContext

回答

0

我想你可以訪問上下文來自應用程序中任何類的任何方法,並且顯示的語法應該可以正常工作 - 如果在開頭添加另一個開放paren。

在你提到的文章中,我不認爲Zarra先生建議對任何從applicationDidFinishLaunching訪問上下文。他警告您此時不要使用上下文來處理整個數據庫中的更改或獲取大量數據。如果您需要訪問一個或兩個託管對象以指導從applicationDidFinishLaunching中顯示您的用戶界面,那應該沒關係。

0

看一看我的回答這個帖子:

Passing managedObjectContext - is this efficient?

基本上,我創建一個使用馬特·加拉格爾的宏單,並訪問任何地方像這樣:

[[MyPersistentStoreController sharedMyPersistentStoreController] managedObjectContext]]; 

你」我們會在上面的鏈接中找到所有的細節和Matt的帖子的鏈接。

2

我同意Wienke。這沒有什麼錯與訪問核心數據堆棧中application:didFinishLaunchingWithOptions:,只要你不認爲方法內開始處理數據。您應該加載一個新的視圖控制器,設置其託管對象上下文,並在該視圖加載後異步啓動該過程。

我不是從你的問題不清楚你想訪問你的應用程序代理內部的管理對象上下文或者,如果你想從不同的類來訪問它。如果您從其他課程訪問它,則您提出的代碼會產生緊密的耦合,從而降低代碼的可重用性。更好的做法是在實例化類時設置屬性。 當你編寫你的視圖控制器類,請確保您設置了一個合成屬性視圖控制器:

// CustomViewControllerClass.h 
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 

// CustomViewControllerClass.m 
@synthesize managedObjectContext = __managedObjectContext;

當你在你的應用程序代理加載你的視圖控制器,通過應用程序委託的管理對象範圍內的視圖控制器:

// MyAppDelegate.m (inside application:didFinishLaunchingWithOptions:) 
     CustomViewController *controller = (CustomViewController *)masterNavigationController.topViewController; 
     controller.managedObjectContext = self.managedObjectContext; 

這樣,如果你有沒有在您的應用程序委託成立了一個核心數據棧,自定義類可以很容易地接受來自任何類實例化它的管理對象範圍內。

+0

我的第一視圖控制器需要一定的數據放置在距離分貝的retreived雖然。那是概率 – TheLearner

+0

你仍然可以做到這一點。你的第一個視圖控制器可以在viewDidLoad中獲取它想要的內容。這樣你的UI加載,你可以避免你想避免的問題。更好的是,使用gcd加載你的數據並從viewDidLoad中調用的方法更新UI。 – jluckyiv

相關問題