Документ "xyz" не может быть сохранен.Произошло множество ошибок валидации - PullRequest
2 голосов
/ 09 мая 2011

Извините, если это немного расплывчато, но это половина проблемы.

У меня есть приложение с основными данными на основе документов, над которым я работаю, оно выполняет то, что ему говорят, во время работы и не генерирует никаких ошибок. Но когда пользователь сохраняет документ, документ выскакивает: «Документ« xyz »не может быть сохранен как« xyz ». Произошло несколько ошибок проверки 'alert.

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

Любые предложения о том, как лучше поступить, приветствуются.

В связи с этим, какой / как лучший способ отловить такую ​​ошибку в будущем, чтобы она не доходила до пользователя.

Большое спасибо

Ответы [ 3 ]

5 голосов
/ 10 мая 2011

Хорошо, как предложил TechZen, запишите ошибку из операции сохранения. Добавьте следующее в MyDocument.m

 - (NSError *)willPresentError:(NSError *)error {

    // Only deal with Core Data Errors
    if (!([[error domain] isEqualToString:NSCocoaErrorDomain])) {
        return error;
    }
    NSInteger errorCode = [error code];
    if ((errorCode < NSValidationErrorMinimum) || (errorCode > NSValidationErrorMaximum)) {
        return error;
    }

    // If there is only 1 error, let the usual alert display it
    if (errorCode != NSValidationMultipleErrorsError) {
        return error;
    }   

    // Get the errors. NSValidationMultipleErrorsError - the errors are in an array in the userInfo dictionary for key NSDetailedErrorsKey
    NSArray *detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
    NSUInteger errorCount = [detailedErrors count];
    NSMutableString *errorString = [NSMutableString stringWithFormat:@"There are %lu validation errors:-", errorCount];
    for (int i = 0; i < errorCount; i++) {
        [errorString appendFormat:@"%@\n",
            [[detailedErrors objectAtIndex:i] localizedDescription]];
    }

    // Create a new error with the new userInfo and return it
    NSMutableDictionary *newUserInfo = [NSMutableDictionary dictionaryWithDictionary:[error userInfo]];
    [newUserInfo setObject:errorString forKey:NSLocalizedDescriptionKey];
    NSError *newError = [NSError errorWithDomain:[error domain] code:[error code] userInfo:newUserInfo];
    return newError;
}

Обратите внимание, что при наличии 100 ошибок вы получите предупреждение, содержащее 100 элементов, которые не являются лучшими, но это хорошая отправная точка для устранения ошибок при сохранении.

2 голосов
/ 09 мая 2011

Ошибки проверки предполагают, что проблема связана с предикатами проверки, которые применяются при сохранении документа. В свою очередь это означает, что некоторые данные, которые вы пытались сохранить, имеют неправильный тип или неправильные значения.

Если вы фиксируете ошибку, возвращаемую из операции сохранения, словарь userInfo должен содержать сведения об ошибках.

0 голосов
/ 03 июля 2013

обычный подозреваемый - это свойство (или два), не установленное в OPTIONAL, но без значения. поэтому предложите категорию для awakeFromInsert, которая вызывается только один раз в NSManagedObject's жизни.

@implementation Entity (Entity_Category)

- (void) awakeFromInsert
{
[super awakeFromInsert];    

[self setPrimitiveValue:[NSDate date] forKey:@"dateCreate"];
[self setPrimitiveValue:[NSDate date] forKey:@"dateUpdate"];
}   
  • Используйте setPrimitiveValue, чтобы избежать записи как UNDO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...