在扩展中实现未处理的协议方法



我正在尝试在我的Cordova插件中实现一些推送通知方法。Cordova创建了自己的UIApplicationDelegate,称为CDVAppDelegate,所以我试图扩展它并使用滑动来添加我的方法。

但是,当我实现在 CDVAppDelegate 中未实现的可选协议方法并使用重排使其可用时,不会调用此新方法。如果我破解CDVAppDelegate代码来实现此方法,则确实会调用新方法。

以下是一些代码片段 - 希望这将有助于澄清情况:

In CDVAppDelegate.h

@interface CDVAppDelegate : NSObject <UIApplicationDelegate>{}

In 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的情况下使其工作?

方法class_addMethod让我实现未实现的方法。如果它不起作用(如果选择器已经有方法实现(,您可以调用它并在method_exchangeImplementations上回退。

相关内容

  • 没有找到相关文章

最新更新