Управление Отменой с базовыми данными

Я пытаюсь реализовать поддержку отмены с помощью Базовых Данных по iPhone, и я столкнулся с несколькими проблемами.

У меня в настоящее время есть несколько настроенных управляемых объектов, но когда я вношу изменения в их свойства, эти изменения не становятся зарегистрированными менеджером по отмене. От моего понимания Базовые Данные, как предполагается, настраивают это автоматически, и я должен быть в состоянии иметь основную отмену и поддержку восстановления изменений, создания и удаления управляемых объектов.

Есть ли специальный способ внести изменения в объекты так, чтобы они были зарегистрированы менеджером по отмене? Или я должен регистрировать действия отмены для каждого изменения?

Кроме того, предположите слайды приложения в подробное представление для редактирования конкретного объекта. Я хотел бы иметь возможность отменить все изменения, внесенные, когда говорят, кнопка отмены поражена. Группировка отмены была бы применима здесь? Каково различие между фиксацией группы, и имейте другого менеджера по отмене, справляются с более прекрасными действиями в подробном представлении по сравнению с использованием просто имеющий одного менеджера по отмене (тот, включенный с контекстом управляемого объекта)?

Спасибо!

12
задан Matthew 7 August 2009 в 16:39
поделиться

1 ответ

While the undo features will work pretty much out of the box, you do need to allocate an NSUndoManager for the NSManagedObjectContext for which you want undo support.

The easiest way to do this is to set up the undo support when something asks your appDelegate for the NSManagedObjectContext

This is the default method that apple gives you:

- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];

        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}

Modify it to look like this:

- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];

        //Undo Support
        NSUndoManager *anUndoManager = [[NSUndoManager  alloc] init];
        [managedObjectContext setUndoManager:anUndoManager];
        [anUndoManager release];

        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}
24
ответ дан 2 December 2019 в 06:26
поделиться