核心数据:基于谓词的验证
Posted
技术标签:
【中文标题】核心数据:基于谓词的验证【英文标题】:Core Data: Predicate-based validation 【发布时间】:2015-04-17 11:10:31 【问题描述】:我正在处理托管对象验证。到目前为止,我已经完成了属性级验证。现在我正在冥想以上属性验证。我可以通过一个大的 if-else 控制流来做到这一点,但想知道是否有更优雅的选择。
我找到了NSValidationPredicateErrorKey
对于基于谓词的验证, 验证失败的条件。
在文档中。
不知何故,我觉得这可能是我的选择,但我在这个主题上一无所获。我搜索了官方文档、SO、知名博客、Marcus S. Zarra 的核心数据书。
那么什么是基于谓词的验证?它甚至存在吗?如果没有记录,它是否相关?有哪些用例?如果是跨属性验证,示例是什么?
【问题讨论】:
inter-property validation
是什么意思?
"There are two types of validation—property-level and inter-property. You use property-level validation to ensure the correctness of individual values; you use inter-property validation to ensure the correctness of combinations of values."
【参考方案1】:
只需覆盖托管对象子类中的validateForInsert
和validateForUpdate
即可实现属性间验证,如here 中的文档所示(带有代码示例)。
“基于谓词”的验证可以通过丰富的托管对象 API 来实现。每个NSManagedObject
都有一个关联的NSEntityDescription
(称为entity
的属性)。通过这个您可以访问每个属性的NSPropertyDescription
。属性描述又具有一个名为validationPredicates
的属性,这是一个用于验证的NSPredicates
数组。请注意,这些是只读的,它们主要用于在验证错误的情况下通知错误对象。此外,据我了解,它们不能总是充分描述上述覆盖中发生的验证。
总而言之,您发现的这个错误键并不真正表明存在指定验证约束的通用、基于谓词的方法。相反,您必须在托管对象类中覆盖上述方法。
【讨论】:
当然。但我的问题是文档中“基于谓词的验证”的含义。 对。我扩展了我的答案来解释。以上是关于核心数据:基于谓词的验证的主要内容,如果未能解决你的问题,请参考以下文章