Странное поведение ошибки ОСНОВНЫХ ДАННЫХ iPhone - PullRequest
0 голосов
/ 14 февраля 2010

У меня действительно странное поведение в приложении Core Data. Это код:

        unaReg.valore = [NSNumber numberWithInt:val];
        NSError *error;
        if (![managedObjectContext save:&error]) {
            [myUtil manageError:[error localizedDescription]];
        }

unaReg является базовым объектом данных, и я хочу обновить его свойство valore. Когда я запускаю команду save (managedObjectContext save:&error), я получаю сообщение об ошибке, поскольку программа перемещается внутри ветви if. Странное поведение заключается в том, что переменная error равна nil, и новое значение правильно сохраняется в базе данных (так что, похоже, ошибки нет). В чем дело???? Спасибо.

Ответы [ 3 ]

4 голосов
/ 15 февраля 2010

Вам необходимо установить NSError *error = nil; для обеспечения безопасности, в противном случае вы получите неопределенное место в памяти.

Как упомянуто gerry3, у вас, вероятно, нулевой управляемый объектный текст. Я бы порекомендовал изменить код на:

unaReg.valore = [NSNumber numberWithInt:val];
NSError *error = nil;
NSAssert(managedObjectContext != nil, @"Context is nil");
if (![managedObjectContext save:&error]) {
    [myUtil manageError:[error localizedDescription]];
}

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

Если ваш managedObjectContext равен nil, вы получите ложный ответ от -save: и поскольку вы не установили ошибку в nil, она будет указывать на «что-то» в памяти, что приведет к путанице.

1 голос
/ 14 февраля 2010

Дважды проверьте, задан ли контекст управляемого объекта:

    unaReg.valore = [NSNumber numberWithInt:val];
    NSError *error;
    NSLog(@"moc = %@",managedObjectContext);
    if (![managedObjectContext save:&error]) {
        [myUtil manageError:[error localizedDescription]];
    }
0 голосов
/ 19 февраля 2010

Если managedObjectContext не равно NULL, вам может потребоваться проверить и другие управляемые объекты, которые вы сохранили в вашем управлении. Иногда ошибка может быть связана с удалением некоторых других объектов, когда вам просто нужно сохранить объект unaReg.

Что я обычно делаю:
- Проверьте свои модели данных на Delete rule, убедитесь, что вы все правильно настроили - При сохранении действия управляемогоObjectContext убедитесь, что другие объекты каким-либо образом удалены из-за Delete rule.

Какая-то другая ситуация, с которой я столкнулся, но сейчас я не могу вспомнить.

Надеюсь, это поможет

...