Ошибка при сохранении managedObjectContext с нулевым значением

Что может привести к тому, что ошибка вернется к нулю, это то, что у меня есть

    + (BOOL)saveContext:(NSManagedObjectContext *)context
    {
      NSError *error = nil;
      if (![context save:&error]) 
      {
        DLog(@"ERROR %@, %@", error, [error userInfo]);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry"

                                                        message:@"Error Saving the Data" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];

        [alert show];
        [alert release];

        return NO;
      }
    return YES;
    }

Вышеупомянутый метод является методом класса, я не уверен, почему об ошибке нет никакой информации.

Этот метод называется так

[HSCoreDataUtility saveContext: self.managedObjectContext];

когда modalViewController закрывается и возвращается в NavigationController, поэтому мне нужно, чтобы контекст был сохранен, но он выдает ошибку, теперь я думаю, что у меня есть представление о причине того, что он не сохраняется, но не должна ли ошибка давать мне подсказка? но в журнале просто написано «ERROR (null), (null)»

Есть предположения


person creativeKoder    schedule 09.11.2010    source источник
comment
Вы уверены, что context не равно нулю?   -  person James Huddleston    schedule 09.11.2010


Ответы (5)


Я могу увидеть эту ситуацию только в том случае, если вы переходите в контекст nil. Я бы поместил логическую бомбу в начало метода этого класса, чтобы защититься от этого.

На самом деле, я бы не стал создавать метод класса для этого небольшого количества кода; но точка все еще остается в силе. Проверьте nil контекст.

person Marcus S. Zarra    schedule 09.11.2010
comment
контекст не равен нулю, я это точно знаю - person creativeKoder; 10.11.2010
comment
Как бы то ни было, я передаю контекст, он начинается в делегате приложения, и я передаю его оттуда, может ли это иметь какое-либо отношение к нему. - person creativeKoder; 10.11.2010
comment
Он может быть где-то выпущен или не сохранен? Пусть он выплюнет текущий [context retainCount] с nil проверкой. Никогда не помешает проверить. - person Stephen Furlani; 10.11.2010
comment
никогда не используйте keepCount. Выполните проверку NSAssert против nil в верхней части метода. - person Marcus S. Zarra; 10.11.2010
comment
Отсутствие контекста было моей проблемой, спасибо за подсказку! - person Chad Schultz; 13.09.2012

Я пережил твою боль и выжил. ;)

После долгого времени отладки я понял, что в методе проверки настраиваемого объекта в некоторых случаях я возвращал НЕТ и не инициализировал ошибку.

Если у вас есть эта проблема, проверьте методы объекта проверки. Вероятно, это тоже была ваша проблема.

person C. Miranda    schedule 23.10.2011
comment
Возможно, это не было проблемой оригинального плаката, но именно это случилось со мной. Спасибо! Похоже, Core Data должен генерировать исключение, а не противоречить документации NSManagedObjectContext - я должен сообщить об ошибке. - person Alex Michaud; 20.09.2012
comment
Это заслуживает 10 голосов за. Я уверен, что это сэкономило мне часы на выдергивание волос! Согласен, вероятно, это не исходная проблема, но она определенно возникает с теми же симптомами. - person David Hunt; 10.01.2013
comment
О мой Бог! Я бы потратил часы, чтобы понять это. Спасибо! - person Rudolf Adamkovič; 03.05.2013
comment
Спасибо! Также потратьте на это часы ... пока не найдете подсказку. - person Holtwick; 01.02.2014

Это действительно старая ветка, но, надеюсь, мой ответ поможет тому, кто найдет это в Google, как и я. Я столкнулся с той же проблемой, и ни один из этих ответов не был моей проблемой; Оказывается, я сделал очень тупую и глупую ошибку, не удалив / переустановив приложение при изменении модели данных, поэтому сохранение не удавалось без ошибок. Убедитесь, что вы не делаете то же самое! :)

person UberJason    schedule 18.12.2013

Хм, я не уверен, что% @ приведет к тому, что ошибка станет подробной. [error localizedDescription]?

person Stephen Furlani    schedule 09.11.2010
comment
Я использовал и [error userInfo], и [error localizedDescription], то же самое, ошибка (null), (null) - person creativeKoder; 10.11.2010

Мне довелось столкнуться с этой проблемой, и после долгой отладки я обнаружил, что это из-за повторяющегося объявления ошибки NSError *, возможно, у вас была другая ошибка NSError * во внешней области, например:

NSError* error = nil;

// some code

if (!error)
{
    NSError* error = nil;

    // your code
}

Тогда ошибка будет нулем, хотя на самом деле есть исключение.

person shicong zhao    schedule 30.04.2012