我正在编写一个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)
}
}