【问题标题】:Generated binding events crash MonoTouch生成的绑定事件使 MonoTouch 崩溃
【发布时间】:2013-01-13 21:49:17
【问题描述】:

我有一个蓝牙 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 = ...”部分犯了错误,有什么想法吗?

谢谢,

罗杰

【问题讨论】:

    标签: binding xamarin.ios


    【解决方案1】:

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

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

    例如

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

    【讨论】:

    • 这正是问题所在!这部分我有点困惑,可能在复制/改编代码时犯了一个错误。 RTFM,因为它在 Xamarin 文档中正确显示。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多