准备 segue 数组时不包含数据(使用 swift)

Posted

技术标签:

【中文标题】准备 segue 数组时不包含数据(使用 swift)【英文标题】:when preparing for segue array contains no data (using swift) 【发布时间】:2014-12-29 22:55:41 【问题描述】:

根据按下的按钮,我想将单词列表附加到开始时声明的变量 (pickedList) 中。当我来准备 segue 时,它​​会覆盖已添加的内容,并且仅使用开始时添加的空数组。我可以在准备 segue 位中附加项目,然后将这些项目转移过来,但这不是我想要的。我对编程非常陌生,搜索了很多,但似乎找不到我要找的东西。提前致谢!

代码如下:

class activeLiteracyOptionsViewController: UIViewController

@IBOutlet weak var satpinButton: UIButton!
var pickedList = [String]()

@IBAction func whenSatpinButtonPressed(sender: AnyObject) 

    pickedList += ["s","a","t","p","i","n"]      


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

   let destinationViewController : flashcardsViewController = segue.destinationViewController as                flashcardsViewController

   destinationViewController.listToPlay = pickedList

【问题讨论】:

【参考方案1】:

从没有以编程方式执行 segue 的情况下,我推断您必须同时设置了 IBAction 以及 Interface Builder 中按钮的 segue。问题是segue(和prepareForSegue)可能在调用IBAction 之前被调用。您应该删除该 segue,并创建一个新的 segue,您将从 IBAction 以编程方式调用它。

因此,您不应该将 segue 附加到 Interface Builder 中的按钮上,而应该只将按钮连接到 IBAction。然后,您可以通过 control 定义两个场景控制器之间的转场 - 从源场景上方栏中的视图控制器按钮拖动到目标场景:

在场景之间添加了这个 segue(但不是从源场景中的按钮),您现在可以在 Interface Builder 中选择该 segue,转到属性检查器,并为该 segue 提供一个唯一的“故事板标识符”:

如果您给它一个标识符SegueToSecondScene,您现在可以定义您的IBAction 来设置pickedList,然后以编程方式执行转场:

@IBAction func whenSatpinButtonPressed(sender: AnyObject) 
    pickedList += ["s","a","t","p","i","n"]      
    performSegueWithIdentifier("SegueToSecondScene", sender: self)

【讨论】:

以上是关于准备 segue 数组时不包含数据(使用 swift)的主要内容,如果未能解决你的问题,请参考以下文章

准备使用数组进行 Segue - Xcode 8.0 Swift 3.0

为啥程序在登录时不执行segue?

UINavigationBar 大标题在执行 segues 时不调整大小

准备 segue 传递数据 nil

如何在我的 segue 准备功能中访问 TableView 索引路径?

UICollectionView 控制器和在准备 Segue 中传递 CloudKit 数据