Objective c 如何实现键值编码验证

Objective c 如何实现键值编码验证,objective-c,xcode,cocoa-bindings,key-value-coding,Objective C,Xcode,Cocoa Bindings,Key Value Coding,我有一个绑定到主/细节UI的ArrayController,它工作得非常好。我现在尝试在模型级别实现验证 指出以下各项可用于验证单个属性: -(BOOL)validateName:(id *)ioValue error:(NSError * __autoreleasing *)outError 因此,如果我的模型属性为“ProjectName”,则应自动触发以下命令: -(BOOL)validateProjectName:(id *)ioValue error:(NSError * __aut

我有一个绑定到主/细节UI的ArrayController,它工作得非常好。我现在尝试在模型级别实现验证

指出以下各项可用于验证单个属性:

-(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  {
当然,在这个方法中,我可以编写代码来确定哪个属性正在被验证,但我不明白为什么它完全忽略了访问器方法


有人能解释一下吗?

验证方法不会自动启动-从您的链接文档:

通常,键值编码不会自动执行验证。调用验证方法是应用程序的责任

而且:

您可以直接调用验证方法,也可以通过调用validateValue:forKey:error:并指定键来调用验证方法。validateValue:forKey:error:的默认实现在接收方的类中搜索名称与模式validate:error:匹配的验证方法。如果找到此类方法,将调用该方法并返回结果。如果找不到这样的方法,validateValue:forKey:error:返回YES,验证值


这就解释了您的第二种情况。

验证方法不会自动启动-从您的链接文档:

通常,键值编码不会自动执行验证。调用验证方法是应用程序的责任

而且:

您可以直接调用验证方法,也可以通过调用validateValue:forKey:error:并指定键来调用验证方法。validateValue:forKey:error:的默认实现在接收方的类中搜索名称与模式validate:error:匹配的验证方法。如果找到此类方法,将调用该方法并返回结果。如果找不到这样的方法,validateValue:forKey:error:返回YES,验证值


这解释了您的第二种情况。

请包括您的财产声明。
@property(strong)NSString*projectName;
请包括您的财产声明。
@property(strong)NSString*projectName;
好吧,这个问题已经神奇地解决了,我不知道为什么或者如何…我重新启动了Xcode,尽管我发现很难相信这会是原因。好吧,好吧,这个问题已经神奇地解决了,我不知道为什么或者如何…我重新启动了Xcode,尽管我很难相信这会发生这是原因。