2016-08-13 56 views
1

我有两个视图控制器。第二个视图控制器托管一个具有自定义单元的表视图,该单元展开回第一个视图控制器并发送与该单元关联的数据。Swift - Unwind segue传回零值?

在第二个视图控制器类中,我实现了didSelectRowAtIndexPath并测试了解正确的项是否存储在类属性中。它正确存储可选值,但是当我尝试在第一个视图控制器中使用该值时,该属性将nil输出到控制台。

// 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 
    } 
} 

该属性出现为零的原因是什么,我该如何解决这种情况?

回答

1

我怀疑你的展开顺序直接连接到你的UITableViewCell,所以它被调用之前触发didSelectRowAtIndexPath

为了解决这个问题,将代码didSelectRowAtIndexPathprepareForSegue

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

究竟是什么固定的问题。我非常感谢! – lifewithelliott

+0

不客气!我很高兴能够提供帮助。 – vacawama