Вопрос по ios, iphone, objective-c – Отмена основного объекта управления данными

4

У меня есть этот код:

Store* store = [NSEntityDescription insertNewObjectForEntityForName:@"Store"];
store.name = @"My Company"
...

Теперь хранилище управляется в контексте и будет сохранено при сохранении контекста, но у меня есть кнопка, где пользователь может отменить форму, в которой собираются данные. Как мне отменить или удалить это из контекста? Или я не так думаю?

Ваш Ответ

4   ответа
6
[store.managedObjectContext rollback];
0

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

10

Основные данные имеютвстроенная поддержка отмены, так что вы можете отменить отдельные изменения, отправив-undo сообщение в контекст:

[store.managedObjectContext undo];

Также поддерживает-redo, Вы можете отменить все изменения вплоть до самого последнего сохранения, используя-rollback метод:

[store.managedObjectContext rollback]

как указано в ответе @ melsam.

Нет ли простого способа отсоединить сущность от контекста, когда у вас есть ссылка на нее? LuckyLuke
В чем разница между отменой и откатом? Что чаще всего используется? LuckyLuke
Но если вы используете отмену, возможно ли, что в коде есть другие места, которые сохраняют что-то в контексте, поэтому, когда вы говорите «отменить», вы можете отменить неправильное изменение? LuckyLuke
@Dude Вы, конечно, можете удалить объект. Однако управляемый объект имеет смысл только в контексте управляемого объекта, так что вы не можете "отсоединить" это и до сих пор есть полезный объект.
@ Dude Первый меняет одно изменение, последний меняетall изменяется до предыдущего сохранения. Вы смотрели на документацию, на которую я ссылался? Это поможет. Также читайте о методах отмены вNSManagedObjectContext reference page, Я только что понял, что ваш вопрос помеченiosпоэтому обратите внимание на примечание в документах, в котором говорится, что вам нужно настроить контекстный менеджер отмены, чтобы включить поддержку отмены.
8

Как упоминалось ранее, вы можете использовать менеджер отмены. Или вы можете просто использовать отдельный ManagedObjectContext и вносить в него все свои изменения. Если вы решили оставить их, сохраните контекст. Если нет, просто откажитесь от него. MOC - это просто блокнот для работы, и он не влияет на базу данных, пока не сохранится.

Вы не можете "действительно" отделить сущность " но вы можете заставить управляемый объект превратиться в ошибку, потеряв все изменения, которые не были сохранены.

[managedObjectContext refreshObject:object mergeChanges:NO];

Отрезано из документации ...

If flag is NO, then object is turned into a fault and any pending changes are lost. The object remains a fault until it is accessed again, at which time its property values will be reloaded from the store or last cached state.

Похожие вопросы