2017-04-08 15 views
0

So bin ich neu zu schnell und ich habe ein wenig über den Zugriff auf Eigenschaften aus einer Unterklasse gelernt. In diesem Fall denke ich, dass mein Problem komplizierter ist.Swift - Problem Zugriff auf Eigenschaft von Unterklasse

Ich habe eine Tabellenansicht, die zu einer Detailansicht wechselt (BuyStats). Und in der "prepare" -Methode setze ich die Eigenschaft "selectedPlayer" für die BuyStats-Klasse.

selectedPlayer funktioniert hier gut und ich habe keine Probleme beim Zugriff auf seine .Name-Eigenschaft.

class BuyStats: UIViewController { 

var selectedPlayer: Player! = nil 

@IBOutlet weak var selectedPlayerNameLabel: UILabel! 
@IBOutlet weak var spendAmount: UILabel! 

override func viewDidLoad(){ 
    let rightBarButton = UIBarButtonItem(title: "Enter", style: UIBarButtonItemStyle.plain, target: self, action: #selector(myRightSideBarButtonItemTapped(_:))) 
    self.title = "Buy Stats" 
    self.navigationItem.rightBarButtonItem = rightBarButton 

    selectedPlayerNameLabel.text = selectedPlayer.Name 

} 

Aber in der Detailansicht habe ich auch eine Containeransicht, die einen Nav-Controller und eine Unterklasse von BuyStats enthält. Ich muss auch auf selectedPlayer in der Unterklasse (BuyStatsTapPager) zugreifen können, aber es funktioniert nicht.

Heres ein Storyboard Bild für den Fall, dass mein Setup ein wenig verwirrend ist.

enter image description here

Dies ist, wo ich die selectedPlayer Eigenschaft aus der Superklasse zugreifen müssen.

class BuyStatsTabPager: BuyStats{ 

@IBOutlet var segmentedControl: UISegmentedControl! 
@IBOutlet weak var scoreKey: UIBarButtonItem! 
@IBOutlet weak var standings: UIBarButtonItem! 

override func viewDidLoad() { 

    navigationController?.navigationBar.barTintColor = UIColor(red: 27/255, green: 27/255, blue: 27/255, alpha: 1) 

    scoreKey.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica", size: 13.0)!], for: UIControlState.normal) 
    scoreKey.tintColor = UIColor.blue 

    standings.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica", size: 13.0)!], for: UIControlState.normal) 
    standings.tintColor = UIColor.blue 

aber die folgende print-Anweisung gibt mir einen Fehler exc_bad_instruction. Sollte das nicht in der Unterklasse verfügbar sein, wenn es in der Oberklasse erfolgreich gesetzt wurde?

'selectedPlayer' zeigt sich in der IDE ohne den Aufruf zu Super, also habe ich es auch versucht.

print(selectedPlayer.Name) 

Ich habe kein Glück mit Google und alle anderen Lösungen, die ich habe, sind versucht, ein wenig verrückt, so dachte ich, ich besser jemanden fragen.

+0

Es hängt davon ab, wie die Instanz von 'BuyStatsTabPager' erstellt wird und die Eigenschaft gesetzt. – vadian

Antwort

0

Ihr Storyboard sieht aus wie in Ihrem Fall ist das Ziel Ihres Segments nicht BuyStats, sondern der Navigationscontroller. In Ihrer prepare(for: sender:) Methode, versuchen Sie dies:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "BuyStats" { 
     let nav = segue.destination as! UINavigationController 
     let buyStats = nav.viewControllers[0] as! BuyStatsTabPager 

     if let indexPath = tableView.indexPathForSelectedRow { 

      let player = players[indexPath.row] 
      buyStats.selectedPlayer = player 

    } 
} 
+0

Danke, das hat mir geholfen, es herauszufinden. Ich habe versucht, die Klassenvererbung zu verwenden, wenn ich in der BuyStats-Klasse eine zweite Vorbereitung für den Übergang verwendet haben sollte. –

Verwandte Themen