我有一个ArrayController绑定到主/详细UI,它工作得很好。我现在正试图在模型级别实现验证。
Apple docs表示以下内容可用于验证各个属性:
-(BOOL)validateName:(id *)ioValue error:(NSError * __autoreleasing *)outError
因此,如果我的模型属性为“ProjectName”,则应自动触发以下内容:
-(BOOL)validateProjectName:(id *)ioValue error:(NSError * __autoreleasing *)outError
但不幸的是,它不会发生:(
然而,有趣的是,如果我使用如下所示的“全部捕获”方法,它可以工作:
-(BOOL)validateValue:(inout __autoreleasing id *)ioValue forKey:(NSString *)inKey error:(out NSError *__autoreleasing *)outError {
在方法中我可以编码来确定当然正在验证哪个属性,但我无法弄清楚为什么它完全忽略了访问器方法?
任何人都可以对此有所了解吗?
答案 0 :(得分:0)
验证方法不会自动触发 - 来自您的链接文档:
通常,键值编码不会自动执行验证 - 您的应用程序有责任调用验证方法。
还有:
您可以直接调用验证方法,也可以调用validateValue:forKey:error:并指定密钥。 validateValue的默认实现:forKey:error:在接收器的类中搜索名称与模式validate:error:的名称匹配的验证方法。如果找到这样的方法,则调用它并返回结果。如果找不到这样的方法,则validateValue:forKey:error:返回YES,验证该值。
这解释了你的第二种情况。