Основные данные: ошибки и исключения, часть 2 - PullRequest
2 голосов
/ 08 января 2010

Мой вопрос похож на этот , но мне нужны дополнительные разъяснения. Я часто получаю исключения во время такого кода:

NSError* error;
if (![managedObjectContext save:&error]) {
    NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
}

Однако, когда я ставлю точку останова в objc_exception_throw, я могу обнаружить, что исключение выдается в save:

(gdb) po [$eax name]
NSInternalInconsistencyException
(gdb) po [$eax description]
optimistic locking failure

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

Кроме того, я даже не могу поймать это исключение с @try ... @catch (NSException * e) в коде. Это все странно.

1 Ответ

2 голосов
/ 08 января 2010

Я думаю, что происходит, что objc_exception_throw перехватывает внутренние исключения в Базовых данных, но они действительно не распространяются на мое приложение. Поскольку я установил свою политику слияния, ошибки блокировки преобразуются в слияния объектов, и все в порядке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...