2010-03-08 3 views
1

Dans CoreData, j'ai le graphe de données avec certaines entités, et chaque objet est peuplé dans un contrôleur de vue, à un écran défini, je veux sortir quelques objets (> 1) pour retourner à un écran de définition.popToViewController déclenche le message "Échec de l'assertion", comment le résoudre?

J'ai essayé de pop la vue des contrôleurs de la pile de navigation avec ces lignes de code:

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

Le objectA, objectB, ObjectC, objectD sont tous les objets de mon graphe de données (avec la relation inverse, Je peux interroger le retour objectA de la objectD par ObjectC)

le message d'erreur suivant se pose:

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

Il y a deux questions ici :

  • Si les deux objets sont différents, comment se fait-il qu'ils ont le même nom? la relation inverse ne peut pas récupérer l'objetA dans lequel j'ai initialisé MyViewController?
  • Comment faites-vous normalement popToViewController? Comment puis-je implémenter sauvegarder/charger l'état actuel de mon contrôleur de navigation afin que lorsque l'application se ferme, je puisse recharger le contrôleur de navigation? Quelles sont les meilleures pratiques?

Répondre

2

Cela n'a rien à voir avec les données de base. Vous créez un nouveau contrôleur de vue lorsque vous devez simplement référencer votre instance MyViewController existante. Le contrôleur nouvellement créé n'est évidemment pas dans la pile du contrôleur de navigation et vous obtenez donc une exception lorsque vous essayez d'y accéder. Utilisez le tableau self.navigationController.viewControllers pour référencer le contrôleur qui se trouve déjà dans la pile du contrôleur de navigation. PopToViewController: ne peut que vous ramener à un ViewController existant déjà dans la pile de UINavigationController.

+0

ouais, merci Ole, je viens de réaliser que: -s stupide moi :( –

+0

J'ai l'autre question, quelles sont les stratégies pour enregistrer/charger la configuration de l'application qui utilise le contrôleur de navigation lorsque l'utilisateur quitte l'application ? –

+0

Vous devriez poser cette autre question dans un autre article –

1

Vous allouez un contrôleur complètement nouveau et essayez d'y accéder.

Le graphique de l'objet Données de base de vos objets de modèle n'est pas directement pertinent ici; tout popToViewController: traite de la pile d'objets ViewController.

Pour afficher un ViewController spécifique, vous avez besoin d'une référence à cet objet ViewController.

Questions connexes