Susan 提供的链接包含您需要的所有详细信息。一个示例实现是这样的:
- (BOOL)validateSecurityCode:(id *)ioValue
error:(NSError * __autoreleasing *)outError
{
// The securityCode must be a numeric value exactly 3 digits long
NSString *testValue = (NSString *)*ioValue;
if (([testValue length]!=3) || ![testValue isInteger])) {
if (outError != NULL) {
NSString *errorString = NSLocalizedString(
@"A Security Code must be exactly 3 characters long.",
@"validation: Security Code, invalid value");
NSDictionary *userInfoDict = @{ NSLocalizedDescriptionKey : errorString };
*outError = [[NSError alloc] initWithDomain:SECURITYCODE_ERROR_DOMAIN
code:SECURITYCODE_INVALID_NAME_CODE
userInfo:userInfoDict];
}
return NO;
}
return YES;
}
注意:我NSString -isInteger
从这篇文章中使用过。
手册说
您可以直接调用验证方法,或者通过调用validateValue:forKey:error:并指定密钥。
这样做的好处是你的- (BOOL)isValid
方法可以非常简单。
- (BOOL)isValid
{
static NSArray *keys = nil;
static dispatch_once_t once;
dispatch_once(&once, ^{
keys = @[@"securityCode", @"number", @"expirationMonth", @"expirationYear"];
});
NSError *error = nil;
for (NSString *aProperty in keys) {
BOOL valid = [self validateValue:[self valueForKey:aProperty]
forKey:aProperty
error:&error];
if (!valid) {
NSLog("Validation Error: %@", error);
return NO;
}
}
return YES;
}