/ / popToViewController solleva il messaggio "Assertion failure", come risolverlo? - iphone, core-data, asserzioni

popToViewController solleva il messaggio "Assertion failure", come risolverlo? - iphone, core-data, asserzioni

In CoreData, ho il grafico dei dati con alcune entità, e ogni oggetto è popolato in un controller di visualizzazione, in una schermata definita, voglio far uscire alcuni (> 1) oggetti per tornare a una schermata di definizione.

Ho provato a estrarre i controller di visualizzazione dallo stack di navigazione con queste righe di codice:

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

L'oggettoA, l'oggettoB, l'oggettoC, l'oggettoD sono tutti gli oggetti del mio grafico di dati (con la relazione inversa, posso interrogare l'oggettoA dall'oggettoD all'oggettoC)

Viene visualizzato il seguente messaggio di errore:

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

Ci sono due domande qui:

  • Se i due oggetti sono diversi, come mai hanno lo stesso nome? la relazione inversa non può recuperare l'oggetto A in cui sono stato utilizzato per inizializzare MyViewController?
  • Come fai normalmente popToViewController? Come posso implementare salvare / caricare lo stato corrente del mio controller di navigazione in modo che quando si chiude l'applicazione, posso ricaricare il controller di navigazione? Quali sono le migliori pratiche?

risposte:

2 per risposta № 1

Questo non ha nulla a che fare con Core Data. Stai creando un nuovo controller di visualizzazione quando devi semplicemente fare riferimento all'istanza MyViewController esistente. Il controller appena creato non si trova ovviamente nello stack del controller di navigazione e pertanto si ottiene un'eccezione quando si tenta di passare ad esso.

Usa il self.navigationController.viewControllers array per fare riferimento al controller che si trova già nello stack del controller nav.


1 per risposta № 2

popToViewController: può solo riportarti a un ViewController esistente già presente nello stack di UINavigationController. Stai assegnando un controller completamente nuovo e poi provi a farlo.

Il grafico dell'oggetto Core Data degli oggetti del tuo modello non è direttamente rilevante qui: tutto il popToViewController: si tratta della pila di oggetti ViewController.

Per accedere a un ViewController specifico, è necessario un riferimento a tale oggetto ViewController.