4

J'ai une application qui est basée sur le modèle utilitaire (où vous retournez la vue pour en voir une autre). Sur la première vue, il y a un écran de connexion, puis il se retourne pour révéler une interface de style UITabBar.Passage d'un managedObjectContext aux vues d'un UITabBarController

Je n'arrive pas à comprendre comment passer le managedObjectContext du délégué de l'application (où il est créé) à toutes les vues de la barre d'onglets.

managedObjectContext App de délégué passé à se FrontLoginViewController qui obtient passé à BackViewTabBarViewController .. ensuite?

La nib BackViewTabBarViewController a un UITabBarController avec un UINavigationController pour chaque onglet.

Répondre

11

Des sons semblables à managedObjectContext sont définis dans votre AppDelegate. Si oui, alors ...

Quel que soit viewController vous voulez ... il suffit d'appeler

MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate]; 

Ensuite, utilisez ...

appDelegate.managedObjectContext 

chaque fois que vous avez besoin du managedObjectContext. Modifiez le MyApplicationDelegate à votre AppDelegate et vous devriez être bon pour aller.

+2

Bien pour une application vraiment triviale, mais pouvons-nous arrêter de promouvoir cet anti-pattern? Ce n'est pas une bonne conception orientée objet, ce n'est pas ce que Apple recommande et tout ce qu'il fait est de rétrograder votre délégué d'application à un localisateur de service glorifié/global. –

+1

Quelle est l'alternative? – SteadyEddi

+0

@LukeRedpath votre commentaire n'est pas utile. Pourquoi ne décrivez-vous pas une alternative? – MatterGoal

2

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. "

Questions connexes