2011-10-11 34 views
5

我正在製作一個應用程序,爲我的學校的人創建課程時間表。這是我想到的應用程序的粗略設計:是NSDocument和CoreData的一個可能的組合,還是NSPersistentDocument的唯一方法?

我想我的NSDocument子類來表示個人的時間表。這個想法是,他們打開一個文檔,並可以從一個池中添加課程到他們的時間表,然後保存,共享,打開等。所以時間表將存儲在用戶選擇的外部文件中。

我想使用CoreData來存儲學生可以選擇的所有課程。這些不會隨着時間表的創建和編輯而改變,而是可能僅在應用程序啓動時才檢查課程信息的更新。

這似乎是構建我的應用程序的邏輯方式。問題是,當我創建一個基於NSDocument的應用程序並檢查use CoreData框時,它使它成爲一個基於NSPersistentDocument的應用程序,而不是使用CoreData功能的基於NSDocument的應用程序。

我不認爲這是我想要的行爲。有沒有辦法使用CoreData,但仍然有基於NSDocument的應用程序?或者是NSPersistentDocument我應該使用什麼呢?我誤解了整個NS *文檔業務嗎?你對我的應用程序結構有什麼建議嗎?

感謝您的幫助!

+0

你說你想使用核心數據存儲所有的課程,學生可以選擇。你是否也會使用Core Data將個人學生的時間表存儲在NSDocument類中?我認爲這是決定是否使用NSPersistentDocument的第二個問題。 – paulmelnikow

+0

@noa:不,我計劃將學生的時間表存儲在由用戶選擇的外部文件中。 –

+0

使用像plist或鍵盤存檔的東西,我猜你的意思是?您可以讓用戶選擇一個單獨的文件,並仍然使用核心數據。這就是NSPersistentDocument可以幫助你做的事情。 – paulmelnikow

回答

2

是的,您可以在不使用NSPersistentDocument的情況下使用Core Data。直接實例化NSPersistentStoreCoordinatorNSManagedObjectContext。以下是一些代碼:how do you create a NSManagedObjectContext

如果要在多個NSDocument實例中共享目錄實例,並且不希望將目錄與每個文檔一起保存,這是一個好方法。您的應用程序或應用程序代理可以負責加載課程目錄,並且您的文檔可以負責加載和保存單個學生的時間表。你必須自己實現,使用鍵控歸檔器,或者自己寫一個plist。

相反,如果你願意,你可以進一步利用核心數據。用NSManagedObject代表學生時間表,並讓NSPersistentDocument負責處理加載和保存上下文。您可以免費獲得許多有用的功能,例如撤消重做。

+0

啊,謝謝你的擴展!我不認爲我在原始問題中包含了足夠的解釋。謝謝! –

相關問題