Ios 在核心数据迁移期间添加关系–自引用

Ios 在核心数据迁移期间添加关系–自引用,ios,core-data,nsexpression,Ios,Core Data,Nsexpression,我正在使用一个服务器执行核心数据迁移 新模型在名为rootReport的报表实体上添加了一个关系 我想将此关系设置为强制关系,而不是可选关系。对于现有报表实体,rootReport应该是自引用。将来添加的报告将引用其他报告作为其根,而不仅仅是它们自己 我给出的链接很好地概述了映射模型中的表达式是如何工作的——它们是兼容的。基于此,我对rootReport使用以下映射规则: FUNCTION($manager, "destinationInstancesForEntityMapp

我正在使用一个服务器执行核心数据迁移

新模型在名为rootReport的报表实体上添加了一个关系

我想将此关系设置为强制关系,而不是可选关系。对于现有报表实体,rootReport应该是自引用。将来添加的报告将引用其他报告作为其根,而不仅仅是它们自己

我给出的链接很好地概述了映射模型中的表达式是如何工作的——它们是兼容的。基于此,我对rootReport使用以下映射规则:

FUNCTION($manager,
         "destinationInstancesForEntityMappingNamed:sourceInstances:",
         "ReportToReport", 
         $source.SELF)
[我格式化了它–在文件中,它全部压缩在一行中。]

然而,我还没有成功地让它为我的rootReport关系工作。迁移后,我总是会收到一个验证错误,并抱怨没有为某些报告设置rootReport:

NSUnderlyingError=Error Domain=NSCOCAerorDomain Code=134110\操作无法完成。Cocoa错误134110。\UserInfo=0x7b294630{attribute=rootReport,entity=Report,reason=Validation错误缺少强制目标关系上的属性值}

有没有关于出错的线索,或者关于如何调试的建议?处理都在应用程序包中,所以当异常出现时,我没有任何上下文可供戳和调查

从完全自动到完全手动的映射层次结构以及映射之间的所有步骤都有一个很好的演练

如果您想更多地了解如何使用这些映射表达式来处理属性,至少有好的文章和文章

设置映射表达式以调用项目中的任意代码或数据上的现有方法很容易。一切都很干净、优雅


您可以使用默认关系映射调用的函数表达式来执行此操作。要调用类方法,您可以使用FUNCTIONCAST、class、。

我不确定上面出现了什么问题

有可能是在创建映射模型之后,我对目标数据模型进行了更改,我没有想到这会是一个问题。但是,在使用文本编辑器查看映射模型时,它们包含大型二进制blob,我怀疑这些blob可能表示创建时的源数据模型和目标数据模型

我删除并重新创建了映射模型,现在我对表单的自引用没有任何问题:

FUNCTION($manager,
        "destinationInstancesForEntityMappingNamed:sourceInstances:",
        "ReportToReport", 
        $source)
这与问题中使用的表达几乎相同,我发现它不起作用。注意,此工作表达式仅使用$source而不是$source.SELF。然而,我很确定我以前会尝试过,所以我不知道这是否是我唯一的错误