Существует стандартный шаблон проверки в Какао, включая Cocoa Touch, называемый Проверка значения ключа , которому вы должны соответствовать, если хотите проверить ввод пользователя, отличный от NSFormatter. .
По сути, для свойства name
, которое вы хотите проверить, вы реализуете метод по следующему шаблону:
- (BOOL)validateName:(id *)ioValue error:(NSError **)error;
Затем, когда вы хотите проверить свойство перед установкой его из пользовательского интерфейса, вы просто используете:
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
}
Обратите внимание, что вы не вызываете метод -validateValue:forKey:error:
или -validateName:error:
в своем методе -setName:
. Вместо этого вы вызываете свой метод -setName:
(как я это делаю с помощью синтаксиса точек выше), как только вы знаете, что значение, которое вы передаете для него, будет действительным.
Кроме того, прочитайте документ о проверке значения ключа, о котором я упоминал выше, чтобы понять, почему proposedName
является автоматически выпущенной копией строкового значения поля, а не только его строкового значения.
Если вы реализуете что-то более сложное, чем проверка по каждому свойству, например, проверка всего объекта или даже проверки графа объекта, обязательно посмотрите, как платформа Core Data в Mac OS X справляется с этим.