Swift Modal Self 变为 Nil

Posted

技术标签:

【中文标题】Swift Modal Self 变为 Nil【英文标题】:Swift Modal Self Becomes Nil 【发布时间】:2015-07-14 20:06:04 【问题描述】:

我有一个 UIViewController,当按下按钮时,我会从 segue 中打开另一个视图。当它打开时,一切都很好,所有功能都可以正常工作。但是,如果我关闭模式然后尝试重新打开它,self 为 nil。

这是我用来打开 Modal 的代码:

self.performSegueWithIdentifier("Search", sender: self)

我的模态有一个 segue 定义为:

模态呈现

全屏

然后我在模式中有一个关闭按钮,它执行以下操作:

dismissViewControllerAnimated(true, completion: nil)

最后,当我尝试使用“搜索”再次打开模式时,模式的 UIViewController 中的 selfnil

因此,当我尝试使用它时,我会收到以下消息:

fatal error: unexpectedly found nil while unwrapping an Optional value

我假设我在某处保留了对 UIViewController 的引用,我只是不知道如何。

感谢任何建议。

【问题讨论】:

所以你点击按钮,它会弹出模式,然后你关闭模式并再次点击相同的按钮,它会给你一个错误?根据您上面显示的代码,这应该可以正常工作,您应该仔细检查应用程序中的其他一些代码。可能尝试在您的 performSegue 中设置“sender: nil”。 @TravisM。确切地。所以我点击执行 performSegue 的按钮。它打开模态。我关闭模态。重新打开它,如果我尝试在模式中使用“自我”(我这样做,因为我在模式中使用列表作为表格视图),它会崩溃,因为“自我”现在为零。我确实尝试根据您的建议在 performSegue 中设置 sender: nil ,尽管没有变化。 【参考方案1】:

好的,

所以事实证明我省略的代码是导致问题的原因。抱歉,我只是不认为这是由它引起的,因为它在所有其他用例中都有效。

我正在使用 Socket.IO 与 NodeJS 服务器实时通信。

在 socket.on 中:

var user = User.sharedInstance

user.socket!.on("search") [weak self]data, ack in

        var json = JSON(data!)

        self.songs.removeAll() // <- Caused the error.

...

所以事实证明[weak self] 会导致 self 如果之前已经设置为 nil。所以我第一次打开 Modal 时,user.socket!.on('search') [weak self] data, ack in ... 工作正常,虽然第二次,当我再次在套接字调用中引用 self 时,它导致它为空。

谢谢!

【讨论】:

以上是关于Swift Modal Self 变为 Nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 colorWithAlphaComponent 示例

使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)

Swift - 使用 selectedIndex 更改 var

从modal中展示viewcontroller的调用方法

在AutoLayout - iOS中,约束计数总是变为零

modal=true 的 Primefaces 对话框无法正常工作