在FMX.Platform.iOS中重载一个方法

FMX.Platform.iOS这个方法被添加到App委托中

 class_addMethod(appDelegateClass, sel_getUid('application:didReceiveLocalNotification:'), @applicationDidReceiveLocalNotification, 'v@:@@'); 

其程序是:

 procedure applicationDidReceiveLocalNotification(self: id; _cmd: SEL; application: PUIApplication; notification: Pointer); cdecl; begin PlatformCocoa.FAppDelegate.application(TUIApplication.Wrap(application), TUILocalNotification.Wrap(notification)); end; 

我想在我的主要单元中重载这个方法,但它只适用于我从FMX.Platform.iOS删除它的声明

在我的主要单位,我添加方法如下:

 class_addMethod(objc_getClass('DelphiAppDelegate'), sel_getUid('application:didReceiveLocalNotification:'), @applicationDidReceiveLocalNotification, 'v@:@@'); 

而我的程序:

 procedure applicationDidReceiveLocalNotification(self: id; _cmd: SEL; application: PUIApplication; notification: Pointer); begin ShowMessage('it works'); end; 

我想尝试和尽可能保持FMX.Platform.iOS源代码,有没有办法告诉编译器使用我的applicationDidReceiveLocalNotification而不是源代码中的?

由于Embarcadero的方法是使用Objective-C的class_addMethod() ,请尝试使用Objective-C的class_replaceMethod()函数将其replace为您自己的实现。 有大量的在线教程,解释如何在iOS中使用方法swizzling添加/重写方法。 请四处search。 你不会find任何delphi的例子,所以你将不得不做一些翻译。