2011-07-31 17 views
5

Pytanie jest dość proste: kiedy należy użyć metody NSManagedObjectContext o nazwie save:(NSError **)error? Z tego, co rozumiem, jedyne, co robi, zapisuje zmienione dane w trwałym sklepie. Delegat aplikacji wygenerowany przez Xcode wywołuje metodę save: na applicationWillTerminate, czy to wystarczy?Kiedy użyć metody save: metody NSManagedObjectContext

Szczegóły o kodzie:

  • Wielowątkowym (robi operacje w tle, dzięki czemu przy użyciu wielu NSManagedObjectContext „s)
  • używam jeden NSPersistentStoreCoordinator
  • Dane zmienione na wątków tła jest scalony za pomocą mergeChangesFromContextDidSaveNotification:
  • Jeśli potrzebujesz więcej informacji, proszę pytać!

Nie mogłem znaleźć wytycznej, kiedy to nazwać, więc postanowiłem zapytać was wszystkich. Z góry dziękuję za twoje odpowiedzi!

Odpowiedz

6

Zawsze musisz zadzwonić zapisać: kiedy chcesz zapisać dane. Nie zawsze można zagwarantować, że wywołanie ApplicationWermination zostanie wywołane. Na przykład, jeśli twoja aplikacja ulegnie awarii z powodu problemów z pamięcią (lub z powodu jednej z kilku innych rzeczy), to nie zostanie ona wywołana.

Zapisałbym dane, gdy użytkownik wykona czynność, która faktycznie generuje dane do zapisania.

+0

A dla zadań tła, takich jak pobieranie nowych informacji z Internetu i dodawanie ich do modelu, który można zapisać po zakończeniu dodawania? Dzięki za odpowiedź! – Koen

+0

Tak - oszczędzałbym, kiedy to się skończyło. Pamiętaj, że twój ManagedObjectContext jest specyficzny dla wątków, więc nigdy nie twórz wątku tła, aby zrobić dla ciebie oszczędności. – dtuckernet

+0

Nazywam 'zapisz:' na tym samym wątku Tworzę obiekt NSManagedObjectContext, który najczęściej jest w wątkach w tle. To nie powinno stanowić problemu, o ile inicjowanie i zapisywanie odbywa się w tym samym wątku, prawda :-) – Koen

Powiązane problemy