2014-11-17 96 views
1

我新的IOS和我下面CS193p斯坦福大學的演講,瞭解核心數據,並在演示中使用的教授一類具有某種程度上類似於實際到,如果我們檢查的核心數據的應用程序複選框,同時創建應用程序,並將核心數據放在appDelegate中。這就是教授在演示中所做的,他在AppDelegate中創建了managedObjectContext並使用通知將上下文傳遞給控制器​​。現在對於作業,他要求使用UIManagedDocument,但我對將它放在哪裏感到困惑。我應該在視圖控制器還是在AppDelegate中聲明它,並使用通知中心傳遞上下文。所以我只想知道哪一個更適合UIManagedDocument。 S何處使用和初始化UIManagedDocument

回答

1

我發現的最佳方式是創建一個新項目(就像樣本),詢問時選中「使用核心數據」,然後查看AppDelegate。用它來看看它是如何完成的,並可能複製相應的部分(當然需要進行一些調整)。但大多數情況下,使用它來了解Apple如何推薦使用它。

使用具有managedObjectContext屬性的共享實例創建自定義類。

在AppDelegate的application didFinishLaunchingWithOptions中,創建您的sharedInstance並將其傳遞給'managedObjectContext`。

MyDataManager *dataManager = [MyDataManager sharedInstance]; 
dataManager.managedObjectContext = self.managedObjectContext; 

還要注意的是,如果你通過點擊「停止」在Xcode終止應用程序,該數據將不被保存(因爲它做了,因爲它應該,當AppDelegate的即將正常關閉應用程序)。

確保在applicationDidEnterBackground中也有[self saveContext];,它應該也在applicationWillTerminate之內。僅在需要時(而不是每次更改)將數據庫寫入內存是一種很好的做法。在AppDelegate中,它還詢問在提交之前數據是否已更改。

當然,如果您有managedObjectContext實例,也可以手動保存。

如果你更改了數據庫,你可能有再次運行之前刪除模擬器應用程序(否則應用程序會崩潰,因爲舊的數據庫不匹配新的一個)。

編輯:我不記得我讀它,但教授不使用CoreData作爲數據庫預先本身,只能用於管理數據(圖像等)。

+0

,那麼什麼纔是UIManagedDocument的目的是什麼? –

+0

'UIManagedDocument'(如果我沒有弄錯的話)是一個更廣泛的類,它幫助管理更多基於文檔的應用程序的Core Data。你可以在這裏閱讀更多關於它的信息(https://developer.apple.com/library/IOS/documentation/UIKit/Reference/UIManagedDocument_Class/index.html),但主要的一點是,這不是必要的案件。 – bauerMusic

1

您可以初始化您的UIManagedDocument,以便您想要啓動對數據庫的訪問。當我完成任務時(去年),我放入了AppDelegate。現在回頭看看UITabBarController中有兩個ViewController,它們都需要上下文。所以我使用了保羅在講座中所使用的NSNotification機制。

他給出了使用UIManagedDocument在「用戶核心數據」複選框(在創建項目時)的原因是:

  1. 這是簡單的爲他講解(UIManagedDocument照顧很多複雜的)
  2. UIManagedDocument使您快速使用iCloud

我剛剛對此進行了審覈。如果你想從保羅聽到他關於它的14分25秒(UIManagedContext)和第12講(秋季2013-14)在會談14:50他開始談論的兩種方式來獲得UIManagedContext - 是UIManagedDocument或「使用核心數據」複選框。

這裏我們一個鏈接到課程上的iTunes:https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550