Iphone 是否存在用于obj-c的通用验证程序库?

Iphone 是否存在用于obj-c的通用验证程序库?,iphone,objective-c,cocoa-touch,validation,Iphone,Objective C,Cocoa Touch,Validation,我想知道是否已经存在一个适用于iPhone项目的通用验证器库,或者更好的用于obj-c的bussines对象库 例如: Validator.IsNotEmpty.. Validator.IsValidEmail.. Validator.IsValidZipCode.. Validator.IsValidRegex.. Validator.IsInRange.. 我什么都没听说过。如果您需要,我会使用Cocoa Touch可用的一个正则表达式库,您应该能够非常轻松地找到这些测试的正则表达式示例。

我想知道是否已经存在一个适用于iPhone项目的通用验证器库,或者更好的用于obj-c的bussines对象库

例如:

Validator.IsNotEmpty..
Validator.IsValidEmail..
Validator.IsValidZipCode..
Validator.IsValidRegex..
Validator.IsInRange..

我什么都没听说过。如果您需要,我会使用Cocoa Touch可用的一个正则表达式库,您应该能够非常轻松地找到这些测试的正则表达式示例。

我什么都没听说过。如果您需要,我会使用Cocoa Touch可用的一个正则表达式库,您应该能够非常轻松地找到这些测试的正则表达式示例。

Cocoa中有一个标准验证模式,包括Cocoa Touch,调用,如果要验证用户输入而不是通过NSFormatter进行验证,则应遵守该调用

本质上,对于要验证的属性名称,可以按照以下模式实现一个方法:

- (BOOL)validateName:(id *)ioValue error:(NSError **)error;
然后,如果要在从UI设置属性之前验证属性,只需使用:

NSString *proposedName = [[nameField.stringValue copy] autorelease];
NSError *nameError;

if ([person validateValue:&proposedName forKey:@"name" error:&nameError]) {
    person.name = proposedName;
} else {
    // present nameError to the user in a reasonable way
}
请注意,您没有在-setName:方法中调用-validateValue:forKey:error:或-validateName:error:方法。相反,只要知道传递给它的值是有效的,就可以像我通过上面的点语法一样调用-setName:方法

另外,请阅读我上面提到的关于键值验证的文档,以了解为什么proposedName是字段字符串值的自动删除副本,而不仅仅是其字符串值

如果您要实现比每属性验证更复杂的东西,例如整个对象验证,甚至对象图验证,请务必了解Mac OS X上的核心数据框架是如何处理的

Cocoa中有一个标准的验证模式,包括Cocoa Touch,如果您希望验证用户输入而不是通过NSFormatter,则应遵守该模式

本质上,对于要验证的属性名称,可以按照以下模式实现一个方法:

- (BOOL)validateName:(id *)ioValue error:(NSError **)error;
然后,如果要在从UI设置属性之前验证属性,只需使用:

NSString *proposedName = [[nameField.stringValue copy] autorelease];
NSError *nameError;

if ([person validateValue:&proposedName forKey:@"name" error:&nameError]) {
    person.name = proposedName;
} else {
    // present nameError to the user in a reasonable way
}
请注意,您没有在-setName:方法中调用-validateValue:forKey:error:或-validateName:error:方法。相反,只要知道传递给它的值是有效的,就可以像我通过上面的点语法一样调用-setName:方法

另外,请阅读我上面提到的关于键值验证的文档,以了解为什么proposedName是字段字符串值的自动删除副本,而不仅仅是其字符串值

如果您要实现比每属性验证更复杂的东西,例如整个对象验证,甚至对象图验证,请务必了解Mac OS X上的核心数据框架是如何处理的