1

Ich habe zwei View-Controller. Der zweite Ansichtscontroller hostet eine Tabellenansicht mit einer benutzerdefinierten Zelle, die zurück zum ersten Ansichtscontroller geleitet wird und die mit dieser Zelle verknüpften Daten zurücksendet.Swift - Unwind segue gibt Nullwert zurück?

In der zweiten Ansicht Controller-Klasse habe ich didSelectRowAtIndexPath implementiert und getestet, um zu sehen, ob das richtige Element in einer Klasseneigenschaft gespeichert ist. Der optionale Wert wird korrekt gespeichert. Wenn ich jedoch versuche, diesen Wert im ersten Ansichtscontroller zu verwenden, gibt die Eigenschaft nil an die Konsole aus.

// First view controller 

@IBAction func unwindActivitiesVCCellTapped(segue: UIStoryboardSegue) 
{ 
    // table view cell tapped 

    guard let activitiesVC = segue.sourceViewController as? ActivitiesVC else { return } 

    print(activitiesVC.activityPerforming) // Displays nil in console output 

    if let activityPerforming = activitiesVC.activityPerforming // thus this does not get called 
    { 
     activityPerformingButton.titleLabel?.text = activityPerforming 
    } 
} 

// Second View Controller 

class ActivitiesVC: UIViewController 
{ 
    @IBOutlet weak var activitiesTableView: UITableView! 

    let activityTitles = [ "Walk" , "Run ", "Cycle", "Mountain Bike" ] 

    var activityPerforming: String? 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     activitiesTableView.dataSource = self 
     activitiesTableView.delegate = self 
    } 
} 

extension ActivitiesVC: UITableViewDelegate 
{ 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    { 
     activityPerforming = activityTitles[ indexPath.row ] 
     print(activityPerfoming) // displays optional value I want 
    } 
} 

// Custom Cell 

class ActivityCell: UITableViewCell 
{ 

    @IBOutlet weak var imageLabel : UILabel! 
    @IBOutlet weak var activityLabel : UILabel! 

    override func awakeFromNib() 
    { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) 
    { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 
} 

Was ist der Grund für die Eigenschaft erscheint als Null und was kann ich tun, um diese Situation zu beheben?

Antwort

1

Ich vermute, dass Ihre Abroller segue direkt auf Ihre UITableViewCell verdrahtet ist, so dass es ausgelöst wird, bevor didSelectRowAtIndexPath genannt wird.

Um dies zu beheben, den Code in didSelectRowAtIndexPath in prepareForSegue bewegen:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let indexPath = activitiesTableView.indexPathForSelectedRow { 
     activityPerforming = activityTitles[ indexPath.row ] 
     print(activityPerfoming) // displays optional value I want 
    } 
} 
+0

Genau das, was das Problem behoben. Ich weiß es sehr zu schätzen! – lifewithelliott

+0

Gern geschehen! Es freut mich, dass ich helfen konnte. – vacawama