2017-07-20 1 views
0

Je suis en train de passer l'objet de base de données de la liste dans le tableViewController à TabBarController pour analyser dans le childViews, je joue Segue à TabBarController sous-classéObjet de passage de base de données de tableViewController à TabBarController

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if let objs = controller.fetchedObjects , objs.count > 0 { 
     let casE = objs[indexPath.row] 
     performSegue(withIdentifier: "showDetail", sender: casE) 
    } 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showDetail" { 
     if let destination = segue.destination as? CaseDetail { 
      if let casE = sender as? Case { 
       destination.casE = casE 
      } 
     } 
    } 
} 

donc passer à tabBarController

class CaseDetail: UITabBarController { 

    var casE: Case? 
} 

Et essayer de l'obtenir chez l'enfant considère viewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    let tbvc = self.tabBarController as! CaseDetail 
    casE = tbvc.casE 
    print(casE as Any) 
} 

Mais encore je n'ai rien, est-ce que quelqu'un connaît d'autres méthodes de transmission de données?

Nous vous remercions de vos conseils et de votre aide!

+0

Imprime la valeur de destination juste avant 'destination.casE = casE' et la valeur de tbvc juste avant' casE = tbvc.casE'. Les adresses sont-elles les mêmes? Si oui, qui imprime en premier? –

+0

adresses ne sont pas les mêmes, d'abord va "destination", puis "tbvc", mais qu'est-ce que cela signifie? destination TBVC et a obtenu cet avertissement Avertissement: tentative de présenter sur dont la vue est pas dans la fenêtre hiérarchie! – Just66

+0

En préparation (pour la section: UIStoryboardSegue, expéditeur: Any?) Ajoutez une instruction d'impression, par ex. print ("a") et dans viewDidLoad() ajoutent une autre instruction d'impression par exemple. imprimer ("b"). Voir si la séquence est un -> b ou b -> un –

Répondre

0

Bon, après avoir lu la documentation Apple, j'ai trouvé une belle note

Chaque fois que vous passez des références NSManagedObject dans votre application, il est utile de les déclarer comme références faibles. Cela permet de protéger votre contrôleur de vue en cas de suppression de NSManagedObject et de laisser une référence flottante à un objet inexistant. Lorsque la propriété est déclarée faible, elle est automatiquement définie sur zéro lorsque l'objet est supprimé.

Alors qui a fait un point, et j'ai changé la sous-classe TabBarController:

class CaseDetail: UITabBarController { 

     weak var casE: Case? 
} 

Et maintenant, il fonctionne parfaitement!