使用 View Controller 作为辅助视图的委托失败,在展开可选时意外发现 nil

Posted

技术标签:

【中文标题】使用 View Controller 作为辅助视图的委托失败,在展开可选时意外发现 nil【英文标题】:Using View Controller as the delegate for an auxilliary view fails with unexpectedly found nil when unwrapping an optional 【发布时间】:2018-09-13 12:35:36 【问题描述】:

我有一个名为 CompanyTableView 的视图控制器,它不是主视图控制器 - 虽然这可能无关紧要

CompanyTableView 有一个功能

func getNxtKey() -> Int 
    return Int(CDM.getMaxID())

该函数调用名为 CDM 的共享实例数据模型类上的函数。

我正在尝试使用 CompanyTableView 作为委托从辅助视图控制器调用该函数 - 这是调用辅助视图的视图控制器

在辅助视图控制器中我有:

var delegate: AnyObject?

然后:

由添加按钮调用:

//添加新联系人或保存编辑的按钮

 @IBAction func btnAddCompany(_ sender: Any) 
  //i have used the following code:

    ic = (delegate as! CompanyTableView).getNxtKey()

此时执行失败,在解包可选时意外发现错误为零

【问题讨论】:

你在哪里初始化delegate属性? 我刚刚意识到我的错误。我没有准备好目标控制器委托是自我的目标 您可以回答自己的问题。可能对其他开发人员有用。 【参考方案1】:

我是 Stack Overflow 的新手,很抱歉,我不知道回答您自己问题的礼仪。

我犯的错误是,在为 segue 做准备时,我没有指定目标视图控制器的委托是 self。

代码如下:

//设置目标控制器并将表示的对象作为repObj传递 让 auxView = segue.destinationController 为! 添加公司控制器 auxView.delegate = self auxView.representedObject = repObj

一旦我添加了 auxView.delegate = self,一切都按预期工作

【讨论】:

以上是关于使用 View Controller 作为辅助视图的委托失败,在展开可选时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

在UITabBarController之前呈现Login View Controller

Pager View Controller 的根视图的大小与后续 View Controller 的大小不同

Model-View-Controller MVC 设计模式

从View Controller调用dismissViewControllerAnimated后刷新View Controller

仅当从警报调用时,如何向第二个向下钻取View Controller添加按钮?

如何创建一个带有可选辅助 View 参数的 SwiftUI 视图?