2014-08-28 1 views
0

Я работаю с iOS-приложением, которое имеет несколько контекстов для нескольких потоков. Иногда приложение при сохранении данных обнаруживает некоторое несоответствие данных об ошибке, например, иногда повисшего указатель ссылки на какой-либо объект, так что приложение заполняет нашу NSError-структуру, которая я прохожу вОшибка обработки при сохранении managedObjectContext

[managedObjectContext save:&error]

по умолчанию приложение вызывает abort() генерировать журнал сбоев и вещи. Мой вопрос заключается в том, что было бы правильным способом справиться с этой ситуацией, не вызвав abort(), который разбивает приложение? Например, есть ли способ сообщить пользователю, что произошла некоторая ошибка и т. Д., И managedObjectContext откатывает его сам и т. Д.?

+0

Вы спрашиваете об этом .. 'if (! [ManagedObjectContext save: & error]) { NSLog (@« Невозможно сохранить!% @% @ », Ошибка, [ошибка локализованнаяDescription]); } ' –

+0

№. Это приведет только к регистрации информации об аварии. У меня это уже есть. Но я прошу получить приложение из этого исключения, как только это произойдет без сбоя приложения. – Umair

ответ

1

Лучшим способом является создание отчета об ошибке и уведомление пользователя о том, что что-то не так с помощью вида предупреждения (или аналогичного). Простой может быть найден в NSManagedObjectContext save error.

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

Но теперь мой вопрос. Какие ошибки вы получаете? Это нормальное поведение? По моему опыту, ошибки, вызванные сохранением контекста, не должны появляться в производстве или, по крайней мере, их следует анализировать.

+0

Хорошо, я понимаю ваш ответ. ошибка возникает из-за какой-то редкой проблемы многопоточности и некоторого некоторого висячего указателя. Затем я анализирую, когда я нахожу журналы, но во время выполнения. Как я могу выйти из этой ошибки, не вызывая abort(). – Umair

+0

@Umair по ссылке, которую я предоставил. Если вы не вызываете прерывание, ничего не произойдет, и выполнение будет продолжено. –

+0

@Umair Если возможно, разверните свой ответ, рассказывая об архитектуре, которую вы используете для управления потоками и контекстом. –

 Смежные вопросы

  • Нет связанных вопросов^_^