Следующий код работает в симуляторе, но не работает на устройстве при вызове _originalSetTextMethod(self, stringParam)
.
Я подозреваю, что проблема связана с этим, но не могу определить соответствующий синтаксис в C #: https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//apple_ref/doc/uid/TP40013501-CH3-SW22
Может ли кто-нибудь предложить предложения относительно того, как я могу запустить это на устройстве? Спасибо.
public static class SetTextSwizzle
{
[DllImport("/usr/lib/libobjc.dylib")]
extern static IntPtr class_getInstanceMethod(IntPtr classHandle, IntPtr Selector);
[DllImport("/usr/lib/libobjc.dylib")]
extern static IntPtr imp_implementationWithBlock(ref BlockLiteral block);
[DllImport("/usr/lib/libobjc.dylib")]
extern static OriginalDelegate method_setImplementation(IntPtr method, IntPtr imp);
static OriginalDelegate _originalSetTextMethod;
[MonoNativeFunctionWrapper]
public delegate void OriginalDelegate(IntPtr one, IntPtr two);
delegate void CaptureDelegate(IntPtr block, IntPtr self, IntPtr paramOne);
public static void Initialise() {
OverrideSetText();
}
static void OverrideSetText()
{
var method = class_getInstanceMethod(new UILabel().ClassHandle, new Selector("setText:").Handle);
var block_value = new BlockLiteral();
CaptureDelegate d = SetTextAndFont;
block_value.SetupBlock(d, null);
var imp = imp_implementationWithBlock(ref block_value);
_originalSetTextMethod = method_setImplementation(method, imp);
}
[MonoPInvokeCallback(typeof(CaptureDelegate))]
static void SetTextAndFont(IntPtr block, IntPtr self, IntPtr stringParam)
{
var label = (UILabel)Runtime.GetNSObject(self);
label?.SetFont();
_originalSetTextMethod(self, stringParam);
}
}