我正在尝试在我的 Cordova 插件中实现一些推送通知方法。Cordova 创建了他们自己的 UIApplicationDelegate,称为 CDVAppDelegate,所以我尝试扩展它并使用 swizzling 添加我的方法。
但是,当我实现一个在 CDVAppDelegate 中未实现的可选协议方法并使用 swizzling 使其可用时,不会调用此新方法。如果我破解 CDVAppDelegate 代码来实现这个方法,新方法就会被调用。
以下是一些代码片段 - 希望这将有助于澄清情况:
在 CDVAppDelegate.h
@interface CDVAppDelegate : NSObject <UIApplicationDelegate>{}
在 CDVAppDelegate.m
@implementation CDVAppDelegate
// added by me
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
return;
}
在我的“扩展 CDVAppDelegate {...}”中
@objc func swizzled_application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
NSLog("\(TAG) APNs token retrieved: \(deviceToken)")
self.swizzled_application(application, didRegisterForRemoteNotificationsWithDeviceToken:deviceToken) // swizzled, so this calls original
...
}
如何在不修改 CDVAppDelegate.m 的情况下使其正常工作?