Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 核心数据跨存储获取属性_Cocoa_Core Data_Fetched Property - Fatal编程技术网

Cocoa 核心数据跨存储获取属性

Cocoa 核心数据跨存储获取属性,cocoa,core-data,fetched-property,Cocoa,Core Data,Fetched Property,我目前正在思考核心数据的一些问题。 我在自己的存储中有一个用户模型,我无法控制它,因为它附带了一个框架。将自动创建此模型的持久存储协调器、托管对象模型和上下文,并且无法触及。其中,该模型有一个单用户实体 另一方面,我有一个属性模型,其中包含一个我完全可以控制的属性实体。在那里,我将一些用户实体的属性存储在另一个存储中。用户和属性实体都具有类似于外键的id属性。 该模型有自己的持久存储协调器、托管对象模型和上下文 我现在想要的是将关联的用户实体作为属性实体的属性,这样我就可以绑定到类似于mypro

我目前正在思考核心数据的一些问题。 我在自己的存储中有一个用户模型,我无法控制它,因为它附带了一个框架。将自动创建此模型的持久存储协调器、托管对象模型和上下文,并且无法触及。其中,该模型有一个单用户实体

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

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

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

但是,我无法在Xcode中为获取的属性设置目标实体,因为目标实体位于完全不同的存储中。我还需要在属性存储中定义我的用户实体吗?如果是这样,核心数据如何知道该实体不是从我的属性存储中提取的,而是从用户存储中提取的

一些线程提到为此使用配置,但我找不到任何文档,除了提到“为此使用配置”之外


有人能告诉我如何设置跨存储获取的属性吗#

您可以使用多个共享同一数据模型的持久存储:

  • 使用单一数据模型(xcdatamodeld)并添加所有实体
  • 为每个“逻辑集”创建配置(编辑器/添加配置) 应存储在单独存储文件中的实体
  • 将实体指定(拖动)到适当的配置
  • 将配置的持久存储添加到您的上下文中(见下文)
  • 配置获取的属性

感谢您的回复和帮助。但是,现在添加只读存储时,会出现“用于打开存储的模型与用于创建存储的模型不兼容”错误。mom是从.xcdatamodel文件创建的,该文件包含其配置中的所有实体。仅仅添加动态存储不会引起问题,而且还会创建一个.sqlite文件,其中包含所有实体的表。仅仅添加静态存储不起作用。我已经用我的代码创建了一个更详细的Gist()。有什么想法吗?可能这意味着您必须使用最新的模型重新创建存储文件(即sqlite数据库)。我的代码:
NSString*path=[[NSBundle mainBundle]pathForResource:@“MyModel”类型:@“momd”];NSURL*momURL=[NSURL fileURLWithPath:path]_managedObjectModel=[[NSManagedObjectModel alloc]initWithContentsOfURL:momURL]另请注意,很抱歉耽搁了很长时间才回复
// 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];