核心数据交叉存储获取属性

时间:2012-07-28 09:26:21

标签: cocoa core-data fetched-property

我目前正在解决Core Data的一些问题。 我在自己的商店中有一个用户模型,我没有任何控制权,因为它附带了一个框架。此模型的持久性存储协调器,托管对象模型和上下文会自动创建,无法触及。其中,此模型具有单个用户实体

另一方面,我有一个带有属性实体的属性模型,我可以完全控制它。在那里,我存储了另一个商店中某些用户实体的属性。用户和属性实体都具有类似于外键的 id 属性。 该模型具有自己的持久存储协调器,托管对象模型和上下文。

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

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

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

有些线程提到了使用配置,但我找不到任何文档,而不是提到“使用配置”。

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

1 个答案:

答案 0 :(得分: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];