У меня есть приложение, которое использует Core Data и получает свой ManagedObjectContext с помощью UIManagedObject. Из чтения я вижу, что я не должен сохранять контекст напрямую - скорее, я должен зависеть от автоматического сохранения UIManagedObject или использовать saveToURL:... Моя проблема в том, что я хочу проверить данные, хранящиеся в моем объекте. У меня есть ограничения на сущность, которые указывают, что минимальная длина строковых свойств равна 1. Однако я могу создать новый объект, присвоить его свойствам пустые строки и сохранить файл. В обработчике завершения saveToURL:... он всегда имеет истинное значение успеха. Затем я создал свой собственный валидатор для свойства name моей сущности. Я использовал пример кода из Core Data Programming Guide —
-(BOOL)validateName:(id *)ioValue error:(__autoreleasing NSError **)outError
{
if (*ioValue == nil)
{
if (outError != NULL)
{
NSString *errorStr = @"nil error";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
forKey:NSLocalizedDescriptionKey];
NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain"
code:1
userInfo:userInfoDict];
*outError = error;
}
return NO;
}
else if( [*ioValue length] == 0 )
{
if (outError != NULL) {
NSString *errorStr = @"length error";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
forKey:NSLocalizedDescriptionKey];
NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain"
code:1
userInfo:userInfoDict];
*outError = error;
}
return NO;
}
else
{
return YES;
}
}
Когда это запускается, я вижу, что ioValue имеет нулевую длину и возвращает NO, но тогда мой обработчик завершения никогда не вызывается. Любая помощь будет здорово.
Есть ли что-то, чего мне не хватает для обработки ошибок сохранения с помощью UIManagedDocument, в частности, как уведомить вызывающий код о том, что произошла ошибка при сохранении его информации.