Как обработать ошибку при сохранении managedObjectContext? - PullRequest
6 голосов
/ 05 марта 2011

Какова подходящая стратегия для восстановления в существующем постоянном хранилище, если при выполнении - [NSManagedObjectContext save:]?

возникает ошибка

- [Откат NSManagedObjectContext]?

Или я должен сохранить копию хранилища в файловой системе перед попыткой сохранения: а затем, если есть ошибка, использовать - [NSPersistentStoreCoordinator setURL: forPersistentStore:], чтобы установить хранилище в сохраненное хранилище?

Спасибо за любые указатели.

Гонсало

Ответы [ 3 ]

10 голосов
/ 05 марта 2011

Когда сохранение не удается, вы (как программист) сделали что-то не так.

Я написал несколько довольно сложных приложений Core-Data и никогда не сталкивался с ошибками сохранения в производственной среде.

Убедитесь, что значения, которые могут вводить пользователи, могут быть сохранены без ошибок.

Это означает, что если у вас нет необязательных отношений, не принимайте кнопку «Готово», пока пользователь не выберет объект для этих отношений. Или установите сущность отношения по умолчанию.
Если вам нужна строка NSString в специальном формате, проверьте эту строку, прежде чем принять ее.

Это также удобнее для пользователя. Если вы скажете ему 10 minutes ago you did something wrong, thats why I will delete all your changes, он подумает WTF?. Если вы скажете ему The value you try to enter is not in the correct format. Please use xxxxx, он подумает Ok, let's change it.

И теперь, когда вы убедились, что сохранение никогда не завершится неудачей, вы можете добавить в него [context rollback], потому что вы никогда не должны говорить никогда.
Но прежде чем сделать это, вы должны спросить пользователя, хочет ли он отправить вам журнал ошибок. Потому что сохранение никогда не должно потерпеть неудачу.

0 голосов
/ 05 марта 2011

NSManagedContext save возвращает BOOL, ДА, если успешно, НЕТ, если нет. Это точно скажет вам, действительно ли хранилище данных было изменено.

Другое дело: Взгляните на «Руководство по программированию основных данных Apple: функции постоянного хранилища» в разделе «Настройка поведения хранилища SQLite». Они дают полный пример того, как настроить параметры полной синхронизации для хранилища, чтобы предотвратить повреждение данных из-за некоторого прерывания в процессе сохранения.

0 голосов
/ 05 марта 2011

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

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