/ / popToViewController podnosi komunikat "Brak potwierdzenia", jak go rozwiązać? - iphone, dane podstawowe, asercje

popToViewController podnosi komunikat "Brak potwierdzenia", jak go rozwiązać? - iphone, dane podstawowe, asercje

W CoreData mam wykres danych z niektórymi obiektami, a każdy obiekt jest zapełniany w kontrolce widoku, na zdefiniowanym ekranie, chcę wyskoczyć kilka (> 1) obiektów, aby powrócić do ekranu definiowania.

Próbowałem wyskoczyć kontrolery widoku ze stosu nawigacji tymi liniami kodu:

ObjectA *objectA = objectD.objectC.objectA;
NSLog(@"objectA name: %@", objectA.name);
MyViewController    *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil withObjectA:objectA];
[self.navigationController popToViewController:controller animated:YES];
[controller release];

ObiektA, obiektB, obiektC, obiektD to wszystkie obiekty z mojego wykresu danych (z relacją odwrotną, mogę odpytać obiektA z obiektuD przez obiektC)

Pojawia się następujący komunikat o błędzie:

Assertion failure in -[UINavigationController popToViewController:transition:], /SourceCache/UIKit_Sim/UIKit-984.38/UINavigationController.m:1807

Są tu dwa pytania:

  • Jeśli te dwa obiekty są różne, dlaczego mają taką samą nazwę? odwrotna relacja nie może odzyskać obiektu A, w którym użyłem do zainicjowania MyViewController?
  • Jak zwykle robisz popToViewController? Jak mogę zaimplementować zapisanie / załadowanie bieżącego stanu mojego kontrolera nawigacyjnego, aby po zamknięciu aplikacji mogę ponownie załadować kontroler nawigacyjny? Jakie są najlepsze praktyki?

Odpowiedzi:

2 dla odpowiedzi № 1

To nie ma nic wspólnego z Core Data. Tworzysz nowy kontroler widoku, gdy powinieneś po prostu odwołać się do istniejącej instancji MyViewController. Nowo utworzony kontroler najwyraźniej nie znajduje się na stosie kontrolera nawigacyjnego, więc otrzymujesz wyjątek podczas próby przełączenia się na niego.

Użyj self.navigationController.viewControllers array, aby odnieść się do kontrolera, który znajduje się już na stosie kontrolera nawigacyjnego.


1 dla odpowiedzi nr 2

popToViewController: może tylko zabrać cię z powrotem do istniejącego ViewController, który jest już na stosie UINavigationController. Przydzielasz zupełnie nowego kontrolera, a następnie próbujesz go otworzyć.

Wykres obiektów Core Data obiektów twojego modelu nie ma tu bezpośredniego znaczenia, a jedynie popToViewController: zajmuje stos obiektów ViewController.

Aby otworzyć określony kontroler ViewController, potrzebujesz odwołania do tego obiektu ViewController.