Что такое хороший шаблон для интерпретации Базовых сообщений Подтверждения правильности данных и отображения их на iPhone?

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

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

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

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

9
задан ScottS 15 August 2010 в 22:17
поделиться

1 ответ

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

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

- (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
}

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

7
ответ дан 3 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: