关闭时将值传递给视图控制器时出错 |斯威夫特 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? [复制]