2010-06-08 76 views
1

this question中,有人问如何编写核心数据的验证方法。我做到了,看起来很酷。但有一件事情不会发生:验证。我可以很容易地设置任何“坏”值,并且这种方法不会自动调用。这背后的概念是什么?我必须在设置任何值之前总是先调用验证方法吗?那么我会编写setter方法来首先调用适当的验证方法吗?核心数据在设置时是否自动验证新值?

如果是的话,遵循严格的约定如何编写验证方法签名有什么意义?那么我想也有一些自动的验证方法。如何激活?

回答

3

验证不是“自动的”,特别是在iOS上。在桌面上,您将拥有处理调用验证的UI元素。在iOS上,您应该使用适当的键调用validateValue:forKey:error:,并在出现错误时处理错误。原因是iOS上缺少标准的错误显示以及验证所有值的开销。

注意在文档中这样评论:

If you do implement custom validation methods, you should typically not invoke them directly. Instead you should call validateValue:forKey:error: with the appropriate key. This ensures that any constraints defined in the managed object model are also applied.

+0

事实上,我觉得相当困难的工作要做验证在核心数据的iPhone。编写所有代码非常繁琐,特别是在本地化方面。这是一个很好的核心数据包装的情况,也许:) – dontWatchMyProfile 2010-06-13 07:14:37

+0

我知道这是一个旧的帖子,但我觉得值得添加:这些方法* do *在您尝试保存托管对象时自动调用,并且错误set也通过记录的错误处理机制渗透回调用者。此外,在设置属性时,CD调用验证方法没有任何意义,因为setter是不带参数的NSError参考的无效方法。之前已经说过,我会告诉你,如果你想在GUI中验证输入而不保存,那么调用validateValue:forKey:error绝对有意义。 – 2011-11-02 20:42:24