【问题标题】:Adding a category to AppDelegate to implement a method from UIAplicationDelegate protocol将类别添加到 AppDelegate 以实现来自 UIAplicationDelegate 协议的方法
【发布时间】:2020-02-17 18:38:08
【问题描述】:
我正在开发一个 Cocoa Touch 框架,我想从 APNS 接收远程通知,我发现(在它需要与 APNS 建立通信的所有过程之后)我必须在 application:didReceiveRemoteNotification:fetchCompletionHandler: 方法中捕获通知。但是,我想让 IOS 开发人员尽可能少做一些工作,所以我一直在想。
- 是否可以在我的框架内创建 AppDelegate 的类别(因为它
在创建新应用时已经有一个扩展),以便
实现这个方法?。
【问题讨论】:
标签:
ios
objective-c
cocoa-touch
push-notification
【解决方案1】:
我会说它不需要。您可以在此处使用与 application:didReceiveRemoteNotification:fetchCompletionHandler: 中相同的参数在您的函数中创建一些函数,并使其可供可能的开发人员从您的框架中调用。
许多框架都以这种方式工作,例如 FacebookSDK。
例如,我在 AppDelegate 中用于打开/处理 URL 的代码:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let fbHandled: Bool = ApplicationDelegate.shared.application(app,
open: url,
sourceApplication: options[.sourceApplication] as? String,
annotation: options[.annotation])
return fbHandled
}
您可以看到 Facebook 只是为我提供了一些公共方法来处理其 SDK 中的链接。与对开发人员可能需要了解并可以更改其代码的内容进行隐式处理相比,这是一个更好的解决方案。