Что такое хороший шаблон для интерпретации сообщений проверки основных данных и их отображения на iPhone? - PullRequest
9 голосов
/ 16 августа 2010

Я реализовал небольшое приложение для проверки концепции, использующее Core Data для получения некоторых значений атрибутов объекта от пользователя через текстовые поля, и все это прекрасно работает благодаря информации, найденной здесь и в приложении iPhone Core Data Recipes.Но я нахожусь в точке, где мне нужно отобразить ошибки проверки объекта пользователю, и я не могу найти рекомендуемый способ обработки этого.Код в приложении Recipe просто регистрирует ошибку и говорит: «Замените эту реализацию кодом, чтобы обработать ошибку соответствующим образом».Отлично, спасибо.

Я уверен, что есть множество способов интерпретировать, анализировать и передавать информацию об ошибках валидации пользователю, но я хотел бы знать, есть ли какие-то лучшие практики илишаблон, который кто-то реализовал, чтобы я мог следовать.Где должен находиться код подтверждения типа [newObject valdiateForInsert&error];?В NSManagedObject подклассы?В UIViewController, который обрабатывает экран, позволяет добавить объект?Может быть, в ValidationController всего приложения?

Все ошибки проверки возвращаются в userInfo NSError, который представляет собой NSDictionary различных ключей и значений NSValidation.Есть ли хороший способ перевести эту информацию об ошибке в нечто полезное для пользователя?Например, в моей модели базовых данных есть правило, согласно которому определенный атрибут может содержать не более 3 символов.Если в процессе сохранения или обновления объекта я получаю ошибку проверки, мне нужно проанализировать NSError userInfo и найти значения для NSValidationErrorKey (имя атрибута), NSValidationErrorValue (значение объекта, вызвавшего ошибку) и NSValidationErrorPredicate (нарушенное правило, которое в этом случае возвращает length <= 3.

. Есть ли хороший, общепринятый способ сбора и преобразования этих данных во что-то, что может быть передано обратно пользователю?«В настоящее время я извлекаю информацию NSError в строки, а затем провожу серию условных выражений для каждого проверяемого атрибута, и это настолько уродливо, что я хочу рвать, когда смотрю на него.лучший, более чистый способ использования ошибок проверки основных данных и передачи читаемой версии пользователю.

1 Ответ

7 голосов
/ 16 августа 2010

Проверки для пользователя отсутствуют.Они есть, поэтому код может поддерживать целостность графа объекта.Методы проверки не вызываются контекстом управляемого объекта до момента сохранения контекста.Это время может быть очень далеко от времени ввода.

Однако вы можете вызывать методы проверки объектов непосредственно перед тем, как установить атрибут.Методы проверки имеют вид:

- (BOOL)validateTimeStamp:(id *)valueRef error:(NSError **)outError;

Предположим, у вас есть атрибут name для подкласса управляемого объекта PeopleMO.Метод проверки на наличие пустой строки может выглядеть следующим образом:

- (BOOL)validateName:(id *)valueRef error:(NSError **)outError{
    BOOL isValid=NO;
    NSString *toTest=(NSString *) valueRef;
    if (![toTest isEqualToString:@""]) {
        isValid=YES;
    }
    return isValid;
}

Вы можете вызывать его в любом месте, например:

NSString *newName=// some UI element text 
PersonMO *newPerson=//.. insert new PersonMO object
if ([newPerson validateName:newName error:nil]) {
    newPerson.name=newName;
}else{
    //... inform user name is invalid
    // ... possibly delete newPerson object from context
}

Это наиболее полезно в тех ситуациях, когда допустимостьЗначение одного атрибута зависит от одного или нескольких других атрибутов того же объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...