2013-02-12 12 views
9

Mam program, który działa idealnie dobrze. Bez awarii, bez błędów lub czegokolwiek, ale jeśli chodzi o usuwanie obiektu NSManagedObject, w konsoli pojawia się następujący komunikat.Adnotacja danych rdzenia - Naprawa brakująca Usuwanie propagacji

Core Data: annotation: repairing missing delete propagation for to-one relationship 

A następnie kilka szczegółów na temat związku.

Po raz kolejny nie powoduje to awarii aplikacji, a program działa zgodnie z oczekiwaniami, ale wciąż mnie to martwi. Czy powinienem coś z tym zrobić, czy może mieć adnotacje z Core Data?

Z góry Z góry :)

+0

To samo dzieje się ze mną, czy używasz kontekstów zagnieżdżonych? – thewormsterror

+0

Nie, tylko zwykły stos danych podstawowych. – user2006934

Odpowiedz

4

Musisz zapisać kontekst po usunięciu zarządzanego obiektu.

Po usunięciu coś:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
NSError *error; 
if (![appDelegate.managedObjectContext save:&error]) { 
    NSLog(@"Error in Appdelegate>getLocalVersionAddFirstVersion"); 
} 

Podobnie jak nowy obiekt nie jest zapisany do sklepu, dopóki kontekst zapisane, usuniętego obiektu nie zostanie usunięty ze sklepu, dopóki kontekst jest zapisywany . (Apple Documentation)

+1

Ta odpowiedź prowadzi mnie do właściwego rozwiązania. –

4

miałem ten sam problem i nie odszedł tak szybko, jak I dodaje związek odwrotną dla relacji w pytaniu.

+0

To rozwiązało problem również dla mnie. Każdy pomysł, dlaczego? – andershqst

+0

Nie. Mogę tylko zacytować przewodnik programowania programowego, który mówi przy kilku okazjach, że ** odwrotne relacje ** są bardzo ważne do ustawienia: _ "Najważniejsze cechy w odniesieniu do integralności grafu obiektu, są jednak odwrotną relacją i reguła usuwania. "_, _" Powinieneś zazwyczaj modelować relacje w obu kierunkach i odpowiednio określać relacje odwrotne. "_ – MartinW

6

Powinieneś przyjąć lepszą strategię usuwania.

  1. Idź do .xcdatamodeld wybierz zaniepokojony relacji
  2. Wybierz swoją jednostkę i relacje z użyciem relację odwrotną
  3. Wybierz co robić na Usuń regułę

    enter image description here

0

Dla mnie był to nieco inny problem: było wykrycie sieroty w miejscu, które usunęło nowo utworzony obiekt natychmiast po zapisaniu, ponieważ zapomniałem dodać nową relację macierzystą do funkcji isOrphan(). O dziwo, doprowadziło to do dokładnie tego błędu ...