2017-07-25 1 views
0

EDIT: J'étais en retrait de mon approche. J'essaie de transmettre des données d'un VC à un autre. Le VC source n'est pas contrôlé par une barre d'onglets, donc je ne peux pas faire référence au VC de destination. Je tente de référencer le VC de destination dans le Storyboard, mais les données sont toujours nulles sur le VC de destination. J'utilise Core Data et souhaite passer le ManagedObjectContext à un autre VC. Voici le code:Comment obtenir une référence à un contrôleur de vue à partir de UITabBarViewController

...... 
        do { 
         try self.managedObjectContext.save() 
         appUserID = user.userID! 
         } catch { 
         fatalError("Error: \(error)") 
        } 
       } 
      } 
     self.passManagedObjectContext() 
    } 

    func passManagedObjectContext() { 
     let profileTableViewController = UIStoryboard(name: "Profile", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileTableViewController 
      profileTableViewController.managedObjectContext = self.managedObjectContext 
     } 


I am passing data from the AppDelegate to other ViewControllers by referencing my TabBarViewControllers stack like so: 



    let tabBarController = window!.rootViewController as! UITabBarController 
     if let tabBarViewControllers = tabBarController.viewControllers { 
      let profileNavController = tabBarViewControllers[4] as! UINavigationController 
      let profileTableViewController = profileNavController.topViewController as! ProfileTableViewController 
      profileTableViewController.managedObjectContext = context 
     } 
    } 
..... 

FIN EDIT Je suis en train de faire la même chose maintenant, mais d'un ViewController à un autre qui est accessible via la barre d'onglets (pas de Segue). Le code ne reconnaît pas au-dessus window!.rootViewController comment puis-je faire référence à la racine UITabBarController?

+0

Vous pouvez partager des données sur les contrôleurs de vue de la barre d'onglets en utilisant segue – Krunal

+0

Où/quand dans AppDelegate essayez-vous de le faire? – DonMag

+0

@DonMag J'ai déjà transmis des données depuis AppDelegate et j'essayais d'utiliser la même approche entre les VCs. Ils ne font pas partie de la même pile de navigation et je ne peux pas le faire via la barre d'onglets. Storyboard Merci. –

Répondre

0

UIViewController a une propriété intégrée en option tabBarController, donc à l'intérieur de votre contrôleur de vue, vous pouvez accéder à la tabBarController comme ceci:

if let tabBarController = tabBarController { 
    //get the controller you need from 
    //tabBarController.viewControllers 
    //and do whatever you need 
} 

Voici la liste actuelle des propriétés disponibles dans le « Obtenir Autres connexes Voir Controllers ' » section de Apple's UIViewController documentation:

UIViewController: 'Getting Other Related View Controllers'

+0

J'ai essayé votre approche, mais j'ai seulement réalisé que le VC source ne fait pas partie de la collection de barres d'onglets. J'essaye de le faire à travers le Storyboard. Toujours pas de chance. Avez-mis à jour la question. Merci. –

+0

Plutôt que d'essayer de passer le contexte d'objet géré autour d'un contrôleur de vue, avez-vous essayé d'y accéder depuis AppDelegate à partir de n'importe quel contrôleur de vue qui en a besoin? – BJHStudios