2011-10-20 6 views
7

Używam obserwacji klucz-wartość. Mam object_1 (NSManagedObject) i kilka innych obiektów-obserwatorów. Po usunięciu obiektu object_1 z kontekstu obiektu zarządzanego mój program ulega awarii.KVO: Czy mogę usunąć wszystkich obserwatorów z konkretnego obiektu

CoreData: error: Poważny błąd aplikacji. Wykryto wyjątek podczas przetwarzania zmiany danych podstawowych. Zazwyczaj jest to błąd w obserwatorze NSManagedObjectContextObjectsDidChangeNotification.

Czy mogę dodać coś do metody dealloc (lub gdzieś indziej), aby usunąć wszystkich obserwatorów obiektu_1? Lub jedyną właściwą decyzją jest wysłanie powiadomienia, kiedy mam zamiar usunąć obiekt_1 z kontekstu obiektu zarządzanego i odsłuchać to powiadomienie przez inne obiekty (aby usunąć siebie z obserwatorów obiektu_1)?

Odpowiedz

7

Musisz upewnić się, że twoi obserwatorzy zostaną usunięci, zanim obiekt zostanie zwolniony. Jest to wadą Key Value Observer.

Jednym ze sposobów, aby to zrobić, jest usunięcie wywoływane z metody dealloc. Oczywiście nie możesz wiedzieć, kto ma obserwatorów na twoim obiekcie, ale nadal będzie musiał je powiadomić.

Chciałbym opisać, co należy zrobić, ale może po prostu sprawdzić odpowiedź bj-homer w pytaniu When should I remove observers? Error about deallocating objects before removing observers.

Jeśli to jest to, o co prosisz, to po prostu głosuj tam. Jeśli nie, głosuj tutaj w dół. Mam nadzieję, że to pomoże.