2015-10-14 21 views
1

歸檔很容易,現在CoreData的概念讓我感到困惑。NSManagedObjectModel和我的.xcdatamodel文件之間的連接?

聲明NSManagedObjectModel和我的實際xcdatamodel文件之間的連接是什麼?

我聲明瞭NSManagedObjectModel,NSManagedObjectContext和相應的NSPersistentStoreCoordinator,並將它們全部連接起來。在這個過程中,我沒有看到任何線索,聲明NSManagedObjectModel屬性與我的xcdatamodel文件有任何關係。

只有當我啓動一個NSFetchRequest時,我告訴它我的目標實體的名稱,以及哪個是我的NSManagedObjectContext。

這樣做會嗎?我不必告訴任何人我的xcdatamodel文件的名稱,但只有目標實體的名稱? NSFetchRequest是否必須搜索我的所有xcdatamodel文件的特定實體?如果我在兩個不同的xcdatamodel中有兩個同名的實體呢?

+0

請閱讀文檔[鏈接](https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Conceptual/CoreData/index.html#//apple_ref/doc/uid/TP40001075 )。核心數據非常複雜,它不是你一天可以學到的東西。如果你想在未來保存自己的頭痛閱讀文檔。相信我,它會爲你做好事。 – nanako

+0

沒有什麼是神奇的,雖然它有時會出現。顯示你使用的代碼。 – Wain

回答

0

當您構建應用程序時,將編譯.xcdatamodel文件以生成.mom文件,該文件已合併到應用程序包中。前綴保持不變,所以「myApplication.xcdatamodel」被編譯爲「myApplication.mom」。

如果你得到這個文件包中的URL(例如使用NSBundleURLForResource:withExtension法),你可以使用initWithContentsOfURL初始化您NSManagedObjectModel實例。或者,這可以解釋明顯缺少任何連接,可以使用mergedModelFromBundles類方法創建NSManagedObjectModel實例,該方法使用給定包中的所有模型(.mom文件)。

+0

謝謝。那完美地回答了我的問題:) – WhiteTherewasproblem

0

NSManagedObjectModel是表示您在數據模型中創建的實體(.xcdatamodeld)的對象。數據模型編輯器有點像源代碼編輯器,而NSManagedObjectModel是代表編譯模型的東西。

NSManagedObjectModel包含對模型中所有實體的引用,它們表示爲NSEntityDescription的實例。該模型對象的目的是

  1. 這樣核心數據可以理解持久性存儲文件。該模型告訴Core Data什麼實體期望。
  2. 因此,像提取請求這樣的核心數據操作可以配置爲正確訪問持久性存儲文件 - 例如,僅使用實際存在的實體。
  3. 因此可以創建NSManagedObject的實例以反映數據模型中的實體。