UIManagedDocument - Проверка основного объекта данных - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть приложение, которое использует Core Data, и оно получает ManagedObjectContext с помощью UIManagedObject.Из прочтения я вижу, что я не предполагаю сохранять контекст напрямую - скорее я должен зависеть от автосохранения UIManagedObject или использовать saveToURL: ... Моя проблема заключается в том, что я хочу проверить данные, хранящиеся в моей сущности.У меня есть ограничения на сущность, которые указывают, что минимальная длина для строковых свойств равна 1. Однако я могу создать новый объект, присвоить его свойствам пустые строки и сохранить файл.В обработчике завершения saveToURL: ... он всегда имеет истинное значение успеха.Затем я создал свой собственный валидатор для свойства name моей сущности.Я использовал пример кода из Руководства по программированию основных данных -

-(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 имеет длину 0 и возвращает NO, но мой обработчик завершения никогда не вызывается.Любая помощь была бы полезна.

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

Ответы [ 2 ]

0 голосов
/ 13 ноября 2012

Я думаю, мне нужно реализовать handleError:(NSError *)error userInteractionPermitted:(BOOL)userInteractionPermitted в подклассе UIManagedDocument. Я обнаружил, что с помощью этой статьи - http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/

0 голосов
/ 18 апреля 2012

Как правило, вам нужно только вызвать saveToURL, чтобы создать новый файл.Пусть автосохранение сделает все остальное.

Кроме того, я не уверен, что следую вашему вопросу.Если вы спрашиваете, как узнать о сбоях сохранения, лучшее, что вы можете сделать, это зарегистрироваться для уведомлений (поскольку все сохранения происходят в фоновом потоке).

Непосредственно из документации:

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

...