生成的绑定事件导致MonoTouch崩溃

时间:2013-01-13 21:49:17

标签: binding xamarin.ios

我有蓝牙BLE设备的绑定,具有以下绑定:

[BaseType (typeof (CBPeripheralDelegate), Delegates=new string [] {"WeakDelegate"}, 
 Events=new Type [] { typeof (BrspDelegate) })]
interface Brsp
{
    //@property (nonatomic, weak) id <BrspDelegate> delegate;
    [Export ("delegate")]
    [NullAllowed]
    BrspDelegate Delegate { get; set; }

    [Wrap ("WeakDelegate")]
    [NullAllowed]
    NSObject WeakDelegate { get; set; }

    ...other stuff

}

以下代表:

    [BaseType(typeof(NSObject))]
    [Model]
    interface BrspDelegate 
    {
         [Abstract]
         [Export("brsp:OpenStatusChanged:"), EventArgs("OpenStatus")]

         ...other stuff
    }

当我为openstatuschanged连接一个生成的事件处理程序时,它立即崩溃了应用程序,我得不到任何反馈可能是错误的。我仍然是绑定的新手,所以......

我有种感觉我错误地使用了“Events = ...”部分,任何想法?

谢谢,

罗吉尔

1 个答案:

答案 0 :(得分:2)

很难说没有更多细节(例如符号化的崩溃日志),但部分绑定被反转(这可能会导致无休止的递归,从而导致应用程序崩溃)。

  • 您的Delegate方法应具有[Wrap]属性(在WeakDelegate上);和
  • 您的WeakDelegate方法应该是[Export]选择器上具有delegate属性的方法。

E.g。

    [Wrap ("WeakDelegate")]
    StronglyTypedDelegate Delegate { get; set; }

    [Export ("delegate")][NullAllowed]
    NSObject WeakDelegate { get; set; }