gpt4 book ai didi

ios - Swift 从永远不应该返回 nil 的 NSNotification() 实例化中返回 nil

转载 作者:可可西里 更新时间:2023-11-01 01:42:24 26 4
gpt4 key购买 nike

这发生在 Swift 1.1 中,在下面的代码中,“theNotification”偶尔会返回 nil,这会导致 NSNotificationCenter.postNotification() 崩溃。我不知道为什么,因为它很少见,可能是因为代码在 iOS8 键盘扩展中,但我不知道为什么这很重要。

class func sendNotificationValue(name : String, value: Int) {
let notificationQ = NSNotificationCenter.defaultCenter()
let userDict = ["value": value]
let theNotification = NSNotification(name: name, object: nil, userInfo: userDict)
notificationQ.postNotification(theNotification)
}

但我的另一个问题是因为 theNotification 不是可选的,我无法检查它是否为 nil,我得到“NSObject 不符合协议(protocol)‘NilLiteralConvertible’”,所以我无法防御性编程来防止崩溃。

显然,最好的解决方案是首先找出它返回 nil 的原因,但我试图至少在这种情况下不会崩溃。关于为什么它会返回 nil 的任何建议,或者我如何在此处检查 nil 的通知?

解决方案:

当你解决最糟糕的错误时,你会觉得自己很傻,而我觉得这个更傻。问题从来都不是 nil NSNotification 分配,LLDB 在这方面对我撒谎,因为它偶尔会在 Swift 中这样做。查看带有 PO 的通知显示它分配得很好。

事实证明,我真正的问题是扩展及其 Controller 偶尔会从内存中卸载。我当时并没有删除我的通知处理程序,所以当它重新加载时,NSNotificationCenter 试图将通知传递给卸载的观察者,所以崩溃了。在可以卸载的 Controller /对象中使用 NSNotifications 时要记住一些事情,当它们被卸载时移除那些观察者。

最佳答案

创建它时只需将 theNotification 键入为可选:

let theNotification: NSNotification? = 
NSNotification(name: name, object: nil, userInfo: userDict)

现在比较 theNotificationnil 是合法的。

关于ios - Swift 从永远不应该返回 nil 的 NSNotification() 实例化中返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28467616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com