在 Swift 中的页面视图控制器内的视图控制器之间传递数据

Posted

技术标签:

【中文标题】在 Swift 中的页面视图控制器内的视图控制器之间传递数据【英文标题】:Passing data between view controllers inside page view controllers in Swift 【发布时间】:2017-06-14 14:08:39 【问题描述】:

很抱歉,如果有人问过这个特定问题,我在其他线程上关注了答案,但似乎没有一个有效,但我刚开始学习 Swift,所以所有这些对我来说都是全新的。

所以,我在两个视图控制器中有一个文本字段,我希望第三个视图控件在我按下按钮时根据其他两个控制器的输入显示结果。

我关注this tutorial 并按照我之前所说的那样放置了文本字段、标签和按钮。 我把我的代码(你可以在下面看到)放在 ViewControl.swift 中。

问题是,当我尝试运行它时,最后两行出现“Thread 1 :EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”错误。

class ViewController: UIViewController 

var a: String = ""
var b: String = ""

@IBOutlet weak var aTextField: UITextField!
@IBOutlet weak var bTextField: UITextField!
@IBOutlet weak var calculateButton: UIButton!
@IBOutlet weak var resultLabel: UILabel!

@IBAction func calculateButtonPressed(_ sender: UIButton) 
    let a = aTextField.text!;  
    let b = bTextField.text!;

我认为错误是由于数据未在视图之间传递(因为在我将所有内容都放在同一个视图中并且工作正常之前),但由于我只有一个 ViewController.swift 文件,我无法弄清楚如何使用 Segue。

【问题讨论】:

【参考方案1】:

不要多次声明相同的变量。在 ab 之前删除 let 。您已经在全局范围内声明了 ab,然后尝试在 IBAction 中重新声明它

class ViewController: UIViewController 

var a: String = ""
var b: String = ""

@IBOutlet weak var aTextField: UITextField!
@IBOutlet weak var bTextField: UITextField!
@IBOutlet weak var calculateButton: UIButton!
@IBOutlet weak var resultLabel: UILabel!

@IBAction func calculateButtonPressed(_ sender: UIButton) 
     a = aTextField.text!;  
     b = bTextField.text!;

【讨论】:

我删除了 let 但它仍然给出相同的错误,如果它有助于控制台显示“致命错误:在展开可选值 (lldb) 时意外发现 nil” 您是否将情节提要中的IBOutlet 连接到aTextFieldbTexfield 是的!它们都连接到 ViewController.swift【参考方案2】:
    确保您的控制插座设置正确。 在您的两个变量 a 和 b 中重新声明。只需更新您的代码,如下所示
@IBAction func calculateButtonPressed(_ sender: UIButton) 
    self.a = aTextField.text!
    self.b = bTextField.text!

【讨论】:

我像你说的那样更新了它,但它仍然给出同样的错误和崩溃。如果它有助于诊断问题,控制台会显示“致命错误:在展开可选值 (lldb) 时意外发现 nil”。我已经对网点进行了三次检查,它们似乎都工作正常。如果我将所有文本字段与按钮放在同一个视图控制器中,则应用程序可以完美运行,但如果我移动它们,我会收到此错误。

以上是关于在 Swift 中的页面视图控制器内的视图控制器之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

从 AppDelegate、Swift 导航到 TabBarController 内的特定视图控制器

允许按钮在页面视图控制器中触发新的视图控制器 - swift

在视图控制器/页面视图控制器中使图像视图全屏显示(swift)

Swift 3 在页面视图控制器中嵌入按钮

在 Swift 中的视图控制器之间传递自定义类数据

UIView 类中的 Swift 集合视图委托