在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的例子,所以你将不得不做一些翻译。