是否在不使用NSObject的情况下使类实例分配到程序结束?

时间:2018-09-16 15:09:50

标签: swift nsobject nsnotifications

我正在编写一个UserNotification库,以便在许多应用程序中重复使用。需要时,下面的.swift文件只是拖到一个新项目中。然后,我向视图控制器场景添加一个NSObject,将其自定义类设置为KTUserNotification。然后,我将一个引用出口从此NSObject拖动到视图控制器中。从那里,我使用此出口调用Show()来显示通知。

我将NSObject与自定义类方法一起使用,因为实例需要保持分配状态,直到应用程序结束。我首先尝试使用let usernotification = KTUserNotification()将其设置为自定义类。但是,这在呼叫到达“ shouldPresent通知”之前已释放,从而导致EXC_BAD_ACCESS。 @IBInspectables只是我在使用NSObject方法时投入的一个很好的补充。

是否还有另一种方法可以在不使用NSObject的情况下直到程序结束之前分配实例? OS是NSObject到达这里的最佳方式吗?

import Cocoa

class KTUserNotification: NSObject, NSUserNotificationCenterDelegate {

    @IBInspectable var showEvenIfAppIsFocus: Bool = true
    @IBInspectable var title: String = ""
    @IBInspectable var subTitle: String = ""
    @IBInspectable var informativeText: String = ""

    @IBAction func showNotification(_ sender: Any) {
        Show()
    }

    override func awakeFromNib() {
        NSUserNotificationCenter.default.delegate = self
    }

    func userNotificationCenter(_ center: NSUserNotificationCenter, shouldPresent notification: NSUserNotification) -> Bool {
        return showEvenIfAppIsFocus
    }

    public func Show(title : String, subTitle: String, informativeText : String) {
        let notification = NSUserNotification()
        let randIdentifier = Int(arc4random_uniform(999999999) + 1)
        notification.identifier = "KTUserNotification\(randIdentifier)"
        notification.title = title
        notification.subtitle = subTitle
        notification.informativeText = informativeText
        notification.soundName = NSUserNotificationDefaultSoundName        
        let notificationCenter = NSUserNotificationCenter.default
        notificationCenter.deliver(notification)
    }

    public func Show() {
        Show(title: title, subTitle: subTitle, informativeText: informativeText)
    }
}

0 个答案:

没有答案