这是在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)
}
但是我的另一个问题是因为Notification不是可选的,我无法检查它是否为nil,我得到“NSObject不符合协议'NilLiteralConvertible”,所以我无法防御程序以防止崩溃。
显然,最好的解决方案是弄清楚为什么它首先返回nil,但我试图在这种情况下至少不会崩溃。有关为什么会返回nil的任何建议,或者我如何在这里检查notification为nil?
决议:
最糟糕的错误会让你在解决问题时感到愚蠢,我觉得这个问题更加愚蠢。问题从未发生过nN NSNotification分配,LLDB对我说谎,因为它偶尔会在Swift中做。看着PO的通知显示它被分配了罚款。
我真正的问题是偶尔可以从内存中卸载扩展及其控制器。我没有删除我的通知处理程序,所以当它重新加载时,NSNotificationCenter试图向卸载的观察者发送通知,因此崩溃。要记住在可以卸载的控制器/对象中使用NSNotifications时需要注意的事项,请删除那些观察者。
答案 0 :(得分:2)
创建时,只需键入theNotification
作为可选项:
let theNotification: NSNotification? =
NSNotification(name: name, object: nil, userInfo: userDict)
现在将theNotification
与nil
进行比较是合法的。