2012-07-28 50 views
0

我目前正在圍繞核心數據的一些問題。 我有一個用戶模型在自己的存儲中,我沒有任何控制權,因爲它隨框架一起發運。此模型的持久性商店協調員,託管對象模型和上下文會自動創建並且無法觸及。在這裏面,這種模式有一個用戶實體核心數據跨存儲提取屬性

在另一方面,我有一個性質模型中有一個性能實體,我有完全的控制權。在那裏,我爲其他商店中的某些用戶實體存儲屬性。用戶和財產實體的id屬性與外鍵相似。 該模型擁有自己的持久性商店契約者,託管對象模型和上下文。

我現在想要的是有關聯的用戶實體爲實體,所以我可能是能夠綁定到類似myproperty.user.someValueOfTheUserEntity關鍵路徑性質的屬性(我知道,myProperty的可能是一個數組使用提取的屬性時)。

但是,由於不支持跨店鋪關係,我想通過獲取屬性使用弱關係。那一個將只需要匹配兩個對應的id屬性。我在性能實體的類文件創建在Xcode和所需存取的用戶已取得的財產(如建議在其他的問題,我在治療由所取得的財產作爲數組返回的值)。

不過,我無法設置一個目的地實體在Xcode中所取得的財產,作爲目標的實體駐留在一個完全不同的商店。我是否也必須定義我的用戶實體屬性存儲?如果是這樣,Core Data如何知道該實體不應該從我的屬性存儲中獲取,而是從用戶存儲中獲取?

某些線程使用的配置此提及,但我無法找到更進一步比提「這種用途的配置」的任何文件。

有人可以告訴我如何設置跨存​​儲獲取屬性?#

回答

0

您可以使用共享相同的數據模型幾個持久性存儲:

  • 使用單一的數據模型(xcdatamodeld)並添加所有實體
  • 創建配置(編輯/添加配置),每個「 實體的邏輯集合」應該存儲在單獨的存儲文件
  • 分配(拖放)實體適當的配置
  • 添加配置持久性存儲到您的上下文(見下文)
  • 配置獲取性能
// 1. Add "static", read-only store 
[coordinator addPersistentStoreWithType:NSSQLiteStoreType 
      configuration:@"your static configuration name goes here..." 
      URL:storeUrl 
      options:@{ 
       NSReadOnlyPersistentStoreOption: @(YES), 
       NSInferMappingModelAutomaticallyOption : @(YES) 
      } 
      error:&error]; 
// 2. Add "dynamic", writable content 
[coordinator addPersistentStoreWithType:NSSQLiteStoreType 
      configuration:@"your dynamic configuration name goes here..." 
      URL:storeUrl 
      options:@{ 
       NSMigratePersistentStoresAutomaticallyOption: @(YES), 
       NSInferMappingModelAutomaticallyOption : @(YES) 
      } 
      error:&error]; 
+0

感謝您的答覆對這個的幫助。 但是,現在當現在將只讀存儲添加「用於打開存儲的模型與用於創建存儲的模型不兼容」時,會引發錯誤。 媽媽是從.xcdatamodel文件創建的,該文件包含其配置中的所有實體。只需添加動態存儲就不會引發問題,並且還會爲所有實體創建帶有表格的.sqlite文件。只是添加靜態存儲不起作用。 我用我的代碼創建了更詳細的Gist(https://gist.github.com/3296730)。 任何想法? – BinaryBucks 2012-08-08 17:20:53

+1

這可能意味着您必須使用最新模型重新創建存儲文件(即sqlite數據庫)。我的代碼:'NSString * path = [[NSBundle mainBundle] pathForResource:@「MyModel」ofType:@「momd」]; NSURL * momURL = [NSURL fileURLWithPath:path]; _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];' P.S.對於很長時間的回覆感到抱歉 – 2012-08-21 10:48:36