2011-03-10 58 views
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,那么一切正常。

任何想法?

回答

2

这是我们本周解决的MonoTouch运行时中的一个错误。它将在下一个MonoTouch的alpha版本中得到修复。

+0

谢谢杰夫! – 2011-03-10 14:33:53