关闭时将值传递给视图控制器时出错 |斯威夫特 5

Posted

技术标签:

【中文标题】关闭时将值传递给视图控制器时出错 |斯威夫特 5【英文标题】:Error passing value to view controller on dismiss | Swift 5 【发布时间】:2019-09-24 16:42:38 【问题描述】:

在关闭时将值从一个视图控制器传输到另一个时出错。

我在ViewController2 中有一个值,我想在解雇时转移到ViewController1。鉴于ViewController2我做了以下解雇:

func OtherFunction() 
    passAndDismiss(scannedScript: stringCodeValue)

注意: stringCode 值确实作为字符串传递给 scannedScript

func passAndDismiss(scannedScript: String) 
  dismiss(animated: true, completion:   
      let viewcontroller = ViewController1()
      viewcontroller.Textfield1.text = scannedScript
  )

在线出现错误:

viewcontroller.Textfield1.text = scannedScript

我得到的错误是:

在隐式展开可选值时意外发现 nil

【问题讨论】:

Textfield1 为零。我猜这是一个IBoutlet。要么是因为它还没有加载,要么是因为它在 UIStoryboard 或未称为 ViewController1.xib 的 xib 中,并且执行 ViewController1() 不会使用 xib/storyboard 加载它,因此不会使用 IBOutlets 加载它... Passing values from one view controller to another in Swift的可能重复 最好的方法是使用一种已知的方法,如链接的 SO 或许多在线可用的教程中所示:learnappmaking.com/… 【参考方案1】:

两个致命问题:

    ViewController1() 是控制器的一个新实例,它不是故事板中的实例。

    解决方案:您需要带有 segue 或情节提要中的实例化的真实实例。

    即使ViewController1() 是预期的控制器,在初始化后插座也不会立即连接。

    解决方案:您必须在ViewController1 中为字符串声明一个临时属性,并将值分配给viewDidLoad 中的标签

【讨论】:

我相信这也是 Mitesh 的建议,但由于某种原因,我收到一条错误消息,提示该文本字段不是视图控制器的成员,您还有其他建议吗? 我有什么明显不同的地方吗?【参考方案2】:

这里你用错误的方式初始化视图控制器。您应该从 xib 或情节提要加载。

不要以您的方式初始化 xib 或故事板的 ui 元素对象。这里 textfield object nil 并且您正在尝试访问它的 text 属性。这就是应用程序崩溃的原因。您应该使用以下方式:

let myViewController = MyViewController(nibName: "MyViewController", bundle: nil)

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "someViewController")

如果您不使用 xib 或故事板,请在该控制器的 init 方法中初始化文本字段对象

【讨论】:

我应该如何访问这个视图控制器中的文本字段?我在做controller.Textfield1.text = scannedScript 但它说 TextField1 不是成员 您应该能够访问文本字段,无需执行任何操作。只要确保不将文本字段声明为私有。如果仍然遇到问题,请分享 textField 的声明代码 最初 TextField 是这样声明的:@IBOutlet weak var TextField1: UITextField! 在第二个视图控制器中我这样做:controller.Textfield1.text = scannedScript 你应该可以访问这个。你能分享这两个控制器文件或示例代码来检查问题吗?

以上是关于关闭时将值传递给视图控制器时出错 |斯威夫特 5的主要内容,如果未能解决你的问题,请参考以下文章

将值从一个视图控制器传递到另一个视图控制器的问题

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

斯威夫特:你如何将信息传递给当前视图控制器下面的视图控制器?

在 uicollectionview 上录制时将图像快速传递给详细视图控制器

如何在使用 Swift 关闭 ViewController 期间将值从 ViewController B 传递给 ViewController A? [复制]

如何将值传递给另一个视图控制器?