【问题标题】:Returning self from a function to conform the protocol UNUserNotificationCenterDelegate从函数返回 self 以符合协议 UNUserNotificationCenterDelegate
【发布时间】:2017-01-14 14:25:54
【问题描述】:

我在开发新应用时遇到了困难。我希望有人可以帮助我解决问题。我会很高兴;)

目前我正在尝试显示通知对象的警报,该通知对象由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
}

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

贾维德你好

【问题讨论】:

    标签: ios swift unusernotificationcenter


    【解决方案1】:

    我认为你最好像这样继承你想成为UNUserNotificationCenterDelegateNSObject的班级

    class MyUserNotificationCenterDelegate : NSObject, UNUserNotificationCenterDelegate {
    
         // implementation
    }
    

    众所周知,NSObject 实现了NSObjectProtocol

    希望对你有帮助!

    【讨论】:

    • 如果我们尝试您的版本,编译器会给出错误,因为您的类的实例是 NSObject 类型而不是 UNUserNotificationCenterDelegate。无论如何谢谢;)
    • 您是否已经尝试过,或者您只是认为它会出错?
    【解决方案2】:

    您的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()
    }
    

    希望这会有所帮助。 :)

    【讨论】:

    • 我会尽快尝试这个。我的 Mac Book 目前有一些问题。希望您的解决方案能够奏效;)我会让你们知道。
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多