2
这里是场景:为什么我需要重写托管包装器委托对象中的可选ObjC方法?
我已经用btouch
工具成功绑定了本地ObjC库中的两个对象。绑定对象是一个类和一个充当它的Delegate对象的协议。委托对象包含必需和可选方法。我已经包含了它需要的额外枚举。除了如果我不重写托管Delegate类中的某些可选方法,我得到了You_Should_Not_Call_base_In_This_Method异常之外,所有内容都可以编译并完美工作。
这是我如何创建该协议的API定义(虚拟方法名):
[BaseType(typeof(NSObject))]
[Model]
interface TheDelegate
{
#region Required
[Abstract]
[Export("requiredMethod:")]
void RequiredMethod(string par);
#endregion Required
#region Optional
[Export("optMethod:")]
void OptMethod(string par);
#endregion Optional
}
如果我离开OptMethod
了定义,应用程序完全执行。但是在那种情况下,当我需要它时,该方法将无法覆盖,我将不得不使用btouch
创建一个包含它的新程序集。
所以,当我继承的委托对象是这样的:
private class MyDelegate : TheDelegate
{
public override void RequiredMethod(string par)
{
//inside RequiredMethod override
}
}
我得到的
... base_In_This_Method的OptMethod方法内
例外。但是,如果我以相同的方式继承它,但API定义不包含OptMethod,那么一切正常。
任何想法?
谢谢杰夫! – 2011-03-10 14:33:53