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 中的 self 为 nil。
因此,当我尝试使用它时,我会收到以下消息:
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)