2017-02-25 1 views
0

Je suis en train d'initier ma pile de données de base avec le VC init de mon application. Pour ce faire, je veux passer le gestionnaire de données de base que j'ai créé dans le premier VC lors du chargement.Définition de Init VC dans App Delegate?

Je pensais que ce code aurait du sens pour passer le coredatamanager dans le VC, mais je reçois des erreurs quelle que soit la façon dont j'écris ce code, je suis sûr de manquer quelque chose de simple?

 // Initialize Storyboard 
    let storyboard = UIStoryboard(name: "RoutineController", bundle: Bundle.main) 

    // Instantiate Initial View Controller 
    if let viewController = storyboard.instantiateInitialViewController() as? ViewController { 
     // Configure View Controller 
     viewController.coreDataManager = coreDataManager 

     // Set Root View Controller 
     window?.rootViewController = viewController 
    } 

erreur est simplement:

Utilisation du type noir 'ViewController'

Toutefois, si je supprime « comme? ViewController 'Je reçois une erreur sur la ligne suivante que viewController n'a pas de propriété coreDataManager.

Y at-il une sorte de délégué que j'ai besoin de définir dans le viewdidload du contrôleur de vue lors de l'envoi?

EDIT révisé mon code pour corriger l'ID story-board, mais le code de la {} ne marche pas semblent exécuter, je reçois l'erreur imprimé je l'ai écrit en raison du si laisser défaut, si ce nest pas toujours la bonne façon de régler le viewController ... des idées pour savoir pourquoi?

 // Initialize Storyboard 
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 

    // Instantiate Initial View Controller 
    if let viewController = storyboard.instantiateInitialViewController() as? RoutineController { 

     // Configure View Controller 
     print("SENDING THIS INFO TO THE FIRST VC \(self.coreDataManager)") 
     viewController.coreDataManager = self.coreDataManager 
     // Set Root View Controller 
     window?.rootViewController = viewController 
    } else { 
     print("WE COULDNT SET VIEWCONTROLLER AS THE DESIGNATED VC SO MOC WASNT PASSED") 
    } 
+0

Vous êtes sûr que votre fichier story-board appelé RoutineController.storyboard? – lukwuerz

+0

pas le VC est appelé RoutineController, le storyboard est principal, mis à jour le OP avec celui qui semble fonctionner maintenant si quelqu'un peut vérifier c'est exact ... – jwarris91

Répondre

0

La solution est que vous devez définir un identifiant dans le cas laisser viewController le trouver avec succès, le code de travail est aussi suit:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    if let viewController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as? TabBarController { 
     viewController.coreDataManager = self.coreDataManager 
     window?.rootViewController = viewController 
1

Ceci est votre problème:

as? ViewController 

devrait être

as! UIViewController 

encore cela devrait aussi fonctionner:

as! RoutineController 
+0

Je pensais que cela, mais il jette "Downcast de 'UIViewController? 'UIViewController' ne déballe que les options, vouliez-vous utiliser '!'? " – jwarris91

+0

ouais je pense que le casting directement comme le nom du contrôleur peut être la solution, mal faire d'autres tests – jwarris91

+0

Great! Bonne chance. – Mozahler

0

Sélectionnez le RoutineController dans votre story-board et définir la storyboar d ID

enter image description here

Ensuite, utilisez l'ID Storyboard ici:

if let viewController = storyboard.instantiateViewController(withIdentifier: "<storyboardID>") as? RoutineController { 
+0

Merci cela semble logique et ne déclenche pas une erreur, mais le code à l'intérieur de la {} après l'as? Le contrôleur de routine n'est pas en cours d'exécution, mis à jour l'OP et la commande d'impression ne fonctionne pas du tout – jwarris91