【发布时间】:2015-03-20 01:38:58
【问题描述】:
我正在使用mapping model 执行核心数据迁移。
新模型在名为rootReport 的Report 实体上添加了一个关系。
我想将此关系设为强制性,而不是可选的。对于现有 Report 实体,rootReport 应该是自引用。将来添加的报告将引用其他报告作为它们的根,而不仅仅是它们自己。
我提供的链接很好地概述了映射模型中的表达式如何工作——它们与NSExpression 兼容。基于此,我对 rootReport 使用以下映射规则:
FUNCTION($manager,
"destinationInstancesForEntityMappingNamed:sourceInstances:",
"ReportToReport",
$source.SELF)
[我格式化了——在文件中,它全部压缩在一行中。]
但是,我没有设法让它适用于我的 rootReport 关系。我总是在迁移后收到验证错误,抱怨没有为某些报告设置 rootReport:
NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=134110 \"操作无法完成。 (Cocoa 错误 134110。)\" UserInfo=0x7b294630 {attribute=rootReport, entity=Report, reason=Validation error missing attribute values on强制目标关系}"
关于出现什么问题的任何线索,或有关如何调试的建议?处理都在 App Kit 中,所以当异常出现时,我没有任何上下文可以戳和调查!
对映射的层次结构有很好的了解,从完全自动到完全手动,以及here 之间的所有步骤。
如果您想更多地了解可以使用这些映射表达式做什么(至少 对属性很有效),有很好的文章 here 和 here。
设置映射表达式以调用项目中的任意代码或数据上的现有方法很容易。这一切都非常干净和优雅。
您可以使用默认关系映射调用的FUNCTION 表达式来执行此操作。要调用类方法,请使用 FUNCTION(CAST("<Class-Name>", "Class"), "<class-method-name>", <any>, <arguments>, <in>, <a>, <list>),如 here 所示。
【问题讨论】:
标签: ios core-data nsexpression