以下是该方案:
我已使用btouch
工具成功绑定了原生ObjC库中的两个对象。绑定对象是一个类和一个充当其Delegate对象的协议。 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
的新程序集。
所以当我继承这样的Delegate对象时:
private class MyDelegate : TheDelegate
{
public override void RequiredMethod(string par)
{
//inside RequiredMethod override
}
}
我得到了
OptMethod方法中的... base_In_This_Method
异常。但如果我以相同的方式继承它,但API定义不包含OptMethod,一切正常。
有什么想法吗?
答案 0 :(得分:2)
这是我们本周解决的MonoTouch运行时中的一个错误。它将在MonoTouch的下一个alpha版本中修复。