1

我一直在开发我的新应用程序。我希望有人可以帮助我解决问题。我会很高兴;)

目前,我正在尝试显示通知对象的警报,该对象由UNUserNotifictionCenter. 当您离开应用程序并触发触发器时,会显示警报,但是一旦您在应用程序中工作并且应该触发警报,则不会发生任何事情。为此,您必须采用UNUserNotificationCenterDelegate,它可以显示通知对象的警报。这就是我卡住的地方。

UNUserNotificationCenterDelegate继承形式NSObjectProtocol,它需要一个名为 的函数,该'self'()函数的实现还返回一个值,该值应该是 类型self

为了返回这个请求的自我,我尝试了两种选择:

func `self`() -> Self {
    var delegate = type(of: self)
    //delegate = type(of: self).self
    return delegate
}

另一个选项,使用线程样式:

func `self`() -> Self {
    var delegate = NSObject().value(forKey: Thread().name!) as! Self
    return delegate
}

这两种选择都不起作用。因此,如果有人能帮我解决这个问题,我将不胜感激。

问候贾维德

4

2 回答 2

2

我认为你最好继承你想成为这样的UNUserNotificationCenterDelegate班级NSObject

class MyUserNotificationCenterDelegate : NSObject, UNUserNotificationCenterDelegate {

     // implementation
}

众所周知,NSObject实现NSObjectProtocol.

希望能帮助到你!

于 2017-01-14T17:13:58.090 回答
1

AppDelegate应该遵守协议UNUserNotificationCenterDelegate以在应用程序处于前台时显示通知。

只需将以下内容添加到您的AppDelegate定义中:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

现在,您将需要在您AppDelegate的确认此协议中添加以下功能

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

        completionHandler([.sound,.alert,.badge])
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    //do whatever you want to here
    completionHandler()
}

希望这可以帮助。:)

于 2017-01-29T06:47:10.107 回答