0

我目前正在考虑 Core Data 的一些问题。我在自己的商店中有一个用户模型,我无法控制它,因为它是随框架一起提供的。该模型的持久存储协调器、托管对象模型和上下文是自动创建的,并且无法触及。在其中,这个模型有一个单一的用户实体

另一方面,我有一个属性模型,其中包含我可以完全控制的属性实体。在那里,我将某些用户实体的属性存储在其他商店中。user 和 property 实体都有一个类似于外键的id属性。这个模型有它自己的 Persistent Store Cordinator、Managed Object Model 和 Context。

我现在想要的是将关联的用户实体作为属性实体的属性,这样我就可以绑定到类似的键路径myproperty.user.someValueOfTheUserEntity(我知道使用获取的属性时 myproperty 可能是一个数组)。

但是,由于不支持跨商店关系,我想通过Fetched Properties使用弱关系。那只需要匹配两个相应的id属性。我在 Xcode 中为用户创建了一个 Fetched 属性,并在我的属性实体的类文件中创建了所需的访问器(正如其他问题中所建议的,我将 Fetched 属性返回的值视为一个数组)。

但是,我无法在 Xcode 中为 Fetched 属性设置目标实体,因为目标实体位于完全不同的商店中。我是否还必须在属性存储中定义我的用户实体?如果是这样,Core Data 怎么知道该实体不是从我的属性存储中获取,而是从用户存储中获取?

一些线程提到为此使用配置,但我找不到比提及“为此使用配置”更进一步的任何文档。

有人可以告诉我如何设置跨存​​储获取的属性吗?#

4

1 回答 1

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];
于 2012-08-07T07:32:48.727 回答