2012-03-14 13 views
6

Używam NSFetchedResultsController do zapełniania i zarządzania źródłem danych tabel.Czy muszę ręcznie zapisać obiekt managedObjectContext for NSFetchedResultsController, jeśli zmienię atrybut?

Kiedy użytkownik wybiera pewien wiersz, actionsheet wyskakuje a następnie pozwala użytkownikowi zmieniać wartość dla tego wiersza:

NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath]; 
[managedObject setValue:status forKey:@"status"]; 

To działa bardzo dobrze i mogę natychmiast zobaczyć zmiany w tableview. Oznacza to, że NSFetchedResultsController wie, że coś się zmieniło i dlatego ponownie wczytuje ten tableviewcell. Gdy zatrzymam i zamknę aplikację (całkowicie), a następnie ponownie ją otworzę, zmiana nie zostanie zapisana.

Myślę, że NSFetchedResultsConroller dba o zapisywanie zmian.

Czy po każdej zmianie muszę ręcznie zapisywać, używając następującego kodu?

// Save the context. 
NSError *error = nil; 
if (![self.managedObjectContext save:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

A może wywołać ten kod w:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject 
     atIndexPath:(NSIndexPath *)indexPath 
    forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)newIndexPath 

Odpowiedz

6

masz rację. Musisz ręcznie zapisać kontekst w sklepie. NSFetchedResultsController pobiera dane z kontekstu, ale nie zapisuje danych w sklepie.

+0

Więc nie jest to zły pomysł, aby zapisać wewnątrz metody delegata "didChangeObject"? – Pieter

+1

Jeśli to zrobisz, możesz zaryzykować pętlę. NSFetchedResultsController delegate metody są używane do aktualizacji widoku, a nie modelu. Tak więc zawsze, gdy coś jest zapisywane w kontekście, widok jest odpowiednio aktualizowany (w zasadzie, więc nie trzeba ciągle przeładowywać widoku tabeli). Jeśli zapisałeś do kontekstu w metodzie delegatów, metoda delegata kontynuowałaby ostrzał, ponieważ zauważyłaby zmianę kontekstu. – Gobot

+0

Jakie jest rozwiązanie? – fatuhoku

Powiązane problemy