Какая разница между NSManagedObjectContext reset и откатом?
В документации написано:
- (void)reset
Возвращает приемник в его базовое состояние.
Обсуждение
Все объекты, управляемые получателем, "забыты". Если вы используете этот метод, вы должны убедиться, что вы также отбрасываете ссылки на любые управляемые объекты, извлеченные с помощью приемника, поскольку после этого они будут недействительными.
- (void)rollback
Удаляет все из стека отмены, отбрасывает все вставки и удаления и восстанавливает обновленные объекты до последних зафиксированных значений.
Обсуждение
Этот метод не возвращает данные из постоянного хранилища или хранилища.
Похоже, что после того, как я внесу некоторые изменения в свой контекст, вызов этих двух методов будет делать то же самое: отказаться от изменений и восстановить обновленные объекты до их последних зафиксированных значений. Итак, что делает -reset
на самом деле?
Ответы
Ответ 1
Ключевая часть находится в цитате
Все объекты, управляемые получателем, "забыты".
- (void)reset;
предоставит вам чистый NSManagedObjectContext
без каких-либо объектов в нем, а поскольку документы docs заявят, что любой NSManagedObject
, который у вас есть, должен быть отброшен, поскольку они больше не действительны.
- (void)rollback
просто вернет NSManagedObject
к их сохраненным значениям
Ответ 2
-reset
отличается от -rollback
тем, что недействителен любой NSManagedObject
, который был выбран из контекста. Можно ожидать, что попытка использовать эти объекты вызовет исключение. Однако -rollback
просто отбрасывает несохраненные изменения.