/ / popToViewController gibt die Meldung "Assertion failure" aus. Wie kann das behoben werden? - iPhone, Core-Daten, Behauptungen

popToViewController löst die Fehlermeldung "Assertion failure" aus, wie löst man sie? - iphone, Kerndaten, Behauptungen

In CoreData enthält das Datendiagramm einige Entitäten, und jedes Objekt wird in einem Ansichts-Controller auf einem definierten Bildschirm ausgefüllt. Ich möchte einige (> 1) Objekte ausgeben, um zum definierten Bildschirm zurückzukehren.

Ich habe versucht, die Ansichtscontroller mit den folgenden Codezeilen aus dem Navigationsstapel zu entfernen:

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];

Die Objekte objectA, objectB, objectC, objectD sind alle Objekte aus meinem Datengraphen (mit der umgekehrten Beziehung kann ich das Objekt objectA von objectD über objectC abfragen).

Die folgende Fehlermeldung wird ausgegeben:

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

Hier gibt es zwei Fragen:

  • Wenn die beiden Objekte unterschiedlich sind, wie kommt es, dass sie denselben Namen haben? kann die umgekehrte Beziehung nicht das Objekt A zurückgeben, in dem ich MyViewController initialisiert habe?
  • Wie machst du normalerweise popToViewController? Wie kann ich das Speichern / Laden des aktuellen Status meines Navigationscontrollers implementieren, sodass ich beim Beenden der Anwendung den Navigationscontroller neu laden kann? Was sind die Best Practices?

Antworten:

2 für die Antwort № 1

Dies hat nichts mit Core Data zu tun. Sie erstellen einen neuen Ansichtscontroller, wenn Sie nur auf Ihre vorhandene MyViewController-Instanz verweisen sollen. Der neu erstellte Controller befindet sich offensichtlich nicht im Stapel des Navigationscontrollers, und Sie erhalten eine Ausnahme, wenn Sie versuchen, dorthin zu wechseln.

Benutze die self.navigationController.viewControllers Array, um auf den Controller zu verweisen, der sich bereits im Stapel des Navigationscontrollers befindet.


1 für die Antwort № 2

popToViewController: Sie können nur zu einem vorhandenen ViewController zurückkehren, der sich bereits auf dem Stapel des UINavigationControllers befindet. Sie ordnen einen völlig neuen Controller zu und versuchen dann, darauf zuzugreifen.

Das Core Data-Objektdiagramm Ihrer Modellobjekte ist hier nicht direkt relevant. Es handelt sich lediglich um den Stapel der ViewController-Objekte.

Um zu einem bestimmten ViewController zu wechseln, benötigen Sie einen Verweis auf dieses ViewController-Objekt.