【问题标题】:Core Data: Predicate-based validation核心数据:基于谓词的验证
【发布时间】:2015-04-17 11:10:31
【问题描述】:

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

我找到了NSValidationPredicateErrorKey

对于基于谓词的验证, 验证失败的条件。

在文档中。

不知何故,我觉得这可能是我的选择,但我在这个主题上一无所获。我搜索了官方文档、SO、知名博客、Marcus S. Zarra 的核心数据书。

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

【问题讨论】:

标签: ios macos core-data nspredicate


【解决方案1】:

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

“基于谓词”的验证可以通过丰富的托管对象 API 来实现。每个NSManagedObject 都有一个关联的NSEntityDescription(称为entity 的属性)。通过这个您可以访问每个属性的NSPropertyDescription。属性描述又具有一个名为validationPredicates 的属性,这是一个用于验证的NSPredicates 数组。请注意,这些是只读的,它们主要用于在验证错误的情况下通知错误对象。此外,据我了解,它们不能总是充分描述上述覆盖中发生的验证。

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

【讨论】:

  • 当然。但我的问题是文档中“基于谓词的验证”的含义。
  • 对。我扩展了我的答案来解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2014-04-01
  • 2013-08-05
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多