核心数据:基于谓词的验证

时间:2015-04-17 11:10:32

标签: ios macos core-data nspredicate

我正在进行托管对象验证。到目前为止,我完成了属性级验证。现在我正在冥想上面的属性间验证。我可以通过一个很大的if-else控制流来做,但想知道是否有更优雅的选择。

我已经找到了NSValidationPredicateErrorKey

  

对于基于谓词的验证,键的谓词为   条件未能验证。

在文档中。

不知怎的,我觉得这可能是我的选择,但我在这个话题上一无所获。我搜索了官方文档,SO,信誉良好的博客,Marcus S. Zarra的核心数据书。

那么什么是基于谓词的验证?它甚至存在吗?如果没有记录,它甚至是相关的吗?有什么用例?如果是行间验证,那么这个例子是什么?

1 个答案:

答案 0 :(得分:0)

只需覆盖托管对象子类中的validateForInsertvalidateForUpdate即可实现属性间验证,如要查找的文档here所示(带代码示例)。

可以通过丰富的托管对象API实现“基于谓词”的验证。每个NSManagedObject都有一个关联的NSEntityDescription(一个名为entity的属性)。通过这个,您可以到达每个房产的NSPropertyDescription。属性描述又有一个名为validationPredicates的属性,一个NSPredicates数组用于验证。请注意,这些是只读的,主要用于在出现验证错误时通知错误对象。此外,根据我的理解,他们不能总是充分描述上面提到的覆盖中发生的验证。

总之,您找到的此错误密钥并不表示存在一种指定验证约束的基于谓词的通用方法。相反,您必须在托管对象类中覆盖上述方法。