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

Core Data: Predicate-based validation

我正在处理托管对象验证。到目前为止,我已经完成了 属性 级别的验证。现在我正在思考上面的 属性 验证。我可以通过一个大的 if-else 控制流程来完成,但想知道是否有更优雅的选择。

我发现 NSValidationPredicateErrorKey

For predicate-based validation, key for the predicate for the condition that failed to validate.

在文档中。

不知怎的,我觉得这可能是我的选择,但我没有找到任何关于这个主题的东西。我搜索了官方文档、SO、知名博客、Marcus S. Zarra 的核心数据书籍。

那么什么是基于谓词的验证?它甚至存在吗?如果没有记录,它是否相关?有哪些用例?如果inter-属性验证,例子是什么?

只需在您的托管对象子类中覆盖validateForInsertvalidateForUpdate即可实现属性间验证,如文档所示[=18] =](带有代码示例)。

"predicate-based" 验证可以通过丰富的托管对象 API 实现。每个 NSManagedObject 都有一个关联的 NSEntityDescription(一个 属性 称为 entity)。通过这个你可以得到每个 属性 的 NSPropertyDescription。 属性 描述依次有一个名为 validationPredicates 的 属性,用于验证的 NSPredicates 数组。请注意,这些是只读的,它们主要用于在验证错误的情况下通知错误对象。此外,据我了解,他们不能总是充分描述上述覆盖中发生的验证。

总而言之,您发现的这个错误键并不真正表明存在指定验证约束的通用的、基于谓词的方法。相反,您必须在托管对象 类.

中覆盖上述方法