Tworzę instancję obiektu NSManagedObjectContext
na poziomie delegatów aplikacji i udostępniam go wszystkim moim UIViewController
s. Oto kod, który używam do niego dostęp w jednym z moim zdaniem kontrolerów:CoreData: Wyczyść zmiany z NSManagedObjectContext
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]];
Teraz na tym ekranie, mam UITableView
z 9 rzędów & każda komórka ma UITextField
. Gdy użytkownik wprowadza wartości do pól tekstowych, przypisuję je do modelObj
. Teraz mój użytkownik ma opcję anulowania i odrzucenia wszystkich zmian lub zapisania ich na dysku. Mam działający kod zapisu. Ale w przypadku, gdy użytkownik próbuje odrzucić zmiany, nie jestem pewien, co zrobić. Wydaje się, że nie ma metody, aby je wszystkie wyrzucić.
Potrafię wymyślić kilka sposobów rozwiązania tego problemu.
- Utwórz nową instancję
NSManagedObjectContext
dla każdego kontrolera zamiast dzielić jedną po drugiej aplikacji. - Mogę też utworzyć w moim kodzie kilka
NSString
s i zapisać w nich wartości użytkownika i zadzwonić pod numerinsertNewObjectForEntityForName:
tylko wtedy, gdy użytkownik kliknie przycisk Zapisz.
Która droga jest właściwa? Czy jest jakiś sposób, aby odrzucić wszystkie zmiany, które zostały w nim wprowadzone?
Dzięki,
Teja.
Odpowiedź Tim Dean jest poprawna. Ale nie byłoby również niewłaściwym podejściem do tworzenia kontekstu podrzędnego dla tego ekranu edycji, wstawiania tam nowego obiektu i zapisywania go tylko do kontekstu nadrzędnego, jeśli użytkownik je potwierdzi. W przeciwnym razie po prostu wyrzuć dziecko i gotowe. –