【问题标题】:Swift Modal Self Becomes NilSwift Modal Self 变为 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 ,尽管没有变化。

标签: ios swift uiviewcontroller modal-dialog


【解决方案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 时,它导致它为空。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多