Chcę dodać menedżera cofania do aplikacji iPhone wspieranej przez coredaty. Kiedy użytkownik próbuje dodać nowy obiekt (dotykając przycisku +), ładuję nowy modalny kontroler widoków i uruchamiam nową grupę cofania w viewDidLoad.Zagnieżdżona grupa cofania z CoreData
Gdy użytkownik naciśnie przycisk Anuluj, chcę wycofać zmiany w wywołaniu zwrotnym cancelAction.
Zapytania:
- Czy to możliwe, aby rozpocząć zagnieżdżone grupy Cofnij i utrzymywać ją przez pętlę zdarzeń i zestawia wszystkie zmiany wykonane w jednej grupie cofania? Teraz, gdy wywołuję funkcję beginUndoGrouping w cancelAction, otrzymuję brakujący wyjątek beginUndoGrouping.
- Jakie jest znaczenie API groupsByEvent dla NSUndoManager? Czy muszę ustawić go na NIE, aby utrzymać grupę cofania w pętli zdarzeń?
- Co należy zrobić w wywołaniu zwrotnym saveAction, aby dokonać zmian na stałe (oprócz wywołania save on mangedObjectContext)? Jak powiadomić Menedżera cofania o zaprzestaniu śledzenia zmian?
Komunikat o błędzie:
* Zakończenie aplikację spowodowane nieprzechwyconego wyjątku 'NSInternalInconsistencyException', powód: „_endUndoGroupRemovingIfEmpty :: NSUndoManager 0x75415f0 jest w nieprawidłowym stanie, endUndoGrouping nazywany bez dopasowywania rozpocząć
Sample Kod:
// RootViewController.m
- (void) addAction {
// Load Modal View Controller to add new object
}
// AddViewController.m
- (void) viewDidLoad {
// Start nested undo group
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager beginUndoGrouping];
[self createModel];
}
- (void) cancelAction {
// Revert all changes
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager endUndoGrouping];
[self.managedObjectContext.undoManager undoNestedGroup];
...
}
- (void) saveAction {
// Save changes
}