2010-02-15 5 views
2

Je sais qu'il y a d'autres questions sur ce sujet, mais aucune ne semble correspondre exactement à ce que je vis, d'où la nouvelle question.Comment référencer le managedObjectContext dans mon App Delegate de mon View Controller?

J'ai une application qui est un UITabBarController, j'ai défini deux sous-vues

Les deux onglets ont leur attribut de classe dans l'identité inspecteur mis à UINavigationController.

Les deux sous-vues sont Classe UIViewController et contiennent des objets MKMapView. J'essaie d'intégrer des données de base avec l'objectif étant que je peux utiliser des données de base pour stocker des informations sur l'objet que je veux placer sur la carte.

J'ai mon UITabBarController défini comme 'rootController' dans mon fichier d'en-tête Delegate. J'ai aussi les propriétés managedObjectModel, managedObjectContext et persistentStoreCoordinator qui y sont définies.

Dans la mise en œuvre du délégué je les accesseurs standard pour les propriétés ci-dessus et j'ai rootController défini comme suit:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

[window addSubview:rootController.view]; 
[window makeKeyAndVisible]; 

} 

Dans mes contrôleurs de vue pour les vues de l'enfant, j'ai défini mon managedObjectContext et synthétisé il .

Maintenant, pour mon problème, je ne peux pas obtenir le compilateur pour me permettre de référencer le managedObjectContext dans le délégué d'application à partir des contrôleurs de vue.

J'ai essayé ce qui suit dans la méthode applicationDidFinishLaunching:

firstView.managedObjectContext = self.managedObjectContext; 

Mais je viens d'obtenir l'erreur suivante:

Accessing unknown 'setManagedObjectContext:' class method 

Quelqu'un peut-il me aider à cela?

Merci


Mise à jour:

Pour ajouter à ma question, je vais la tête de quelques réponses en fournissant plus de détails

J'ai une déclaration @class dans mon appdelegate.h fichier J'ai une # déclaration d'importation dans mon fichier appdelegate.m pour le fichier firstView.h J'ai déclaré ma firstView comme suit dans mon fichier appdelegate.h

FirstView *firstView; 
+0

En fait, j'ai trouvé une faute de frappe. Je référençait la classe plutôt que l'instance dans mon instruction firstView.managedObjectContext. Compiler sans erreurs maintenant. Merci @ Gerry3 – conorgriffin

+0

Oui, le fait que le message d'erreur que vous receviez disait "class method" était étrange, alors je me demandais comment vous utilisiez la classe plutôt qu'une instance de cette classe. Heureux que tu es parvenu à le faire fonctionner. – gerry3

Répondre

2

Comment est-ce que firstView est déclaré et affecté?

Ce devrait être une référence à un objet avec une propriété nommée "managedObjectContext".

+0

Firstview est un uiviewcontroller. Mamagedobjectcontext est une propriété de uiviewController – conorgriffin

+0

@ Gerry3 Voulez-vous dire comment est-il défini dans le délégué? – conorgriffin

+0

Oui, est-il déclaré en tant que UIViewController ou bien en tant que sous-classe personnalisée de UIViewController qui possède réellement la propriété? – gerry3

0

J'ai rencontré ce même problème, je vais partager ma solution.

D'abord vous avez besoin d'une référence au contrôleur de navigation dans la barre d'onglets dans le fichier nib, assurez-vous de le connecter.

IBOutlet UINavigationController *navigationController; 

Ensuite, obtenir le contrôleur comme recommandé dans la documentation de support et de lui envoyer le managedObjectContext:

SavedTableViewController *saved = (SavedTableViewController *)[navigationController topViewController]; 
saved.managedObjectContext = self.managedObjectContext; 

Alex (d'un autre poste) est juste, « Vous devriez généralement rester à l'écart d'obtenir des objets partagés du délégué de l'application: il se comporte trop comme une variable globale, et tout un tas de problèmes y sont associés. "

+0

Si vous n'utilisez qu'un contrôleur de vue pour modifier des objets et que les autres affichent les contrôleurs à afficher, le partage d'objets n'est pas vraiment un problème. – conorgriffin

+0

Vous avez un bon point, mais que se passe-t-il si vous ajoutez un autre contrôleur à l'avenir qui y accédera également? Ou vous voulez restructurer votre application? Cette méthode est plus sur l'épreuve du futur et assurez-vous de ne pas rencontrer des problèmes inutiles sur la route. Le CD était destiné au délégué de l'application pour donner le contexte au contrôleur, et non l'inverse. Ce n'est pas mon idée d'une implémentation idéale, mais c'est ce que les ingénieurs ont recommandé, juste en passant le message. –

Questions connexes