【问题标题】:Binding StickNFind for Xamarin fails to compile为 Xamarin 绑定 StickNFind 无法编译
【发布时间】:2014-01-24 22:35:46
【问题描述】:

我正在尝试为 StickNFind 进行绑定以在基于 Xamarin 的项目中使用。

有问题的类是LeDeviceManager,它继承了CBCentralManagerDelegate,这是一个抽象类,UpdateState(m)方法不是绑定的一部分。

这是这个类的 Obj-C 标头:

interface LeDeviceManager : NSObject <CBCentralManagerDelegate>

@property (nonatomic,strong) NSMutableArray *devList;
@property (nonatomic)        CBCentralManager *btmgr;
@property (nonatomic,strong) id <LeDeviceManagerDelegate> delegate;

- (id)      initWithSupportedDevices: (NSArray *) devCls delegate: (id <LeDeviceManagerDelegate>) del;
- (void)    startScan;
- (void)    stopScan;

@end

在 Objective Sharpie 的大力协助下,这是我想出的绑定:

    [Model, BaseType (typeof(CBCentralManagerDelegate))]
    public partial interface LeDeviceManager
    {
        [Export ("devList", ArgumentSemantic.Retain)]
        NSMutableArray DevList { get; set; }

        [Export ("btmgr")]
        CBCentralManager Btmgr { get; set; }

        [Export ("delegate", ArgumentSemantic.Retain)]
        LeDeviceManagerDelegate Delegate { get; set; }

        [Export ("initWithSupportedDevices:delegate:")]
        IntPtr Constructor (NSObject[] devCls, LeDeviceManagerDelegate del);

        [Export ("startScan")]
        void StartScan ();

        [Export ("stopScan")]
        void StopScan ();

        [Export ("UpdatedState")] 
        [New] // Added as suggested by another SO post, also tried [Abstract]
        void UpdatedState(CBCentralManager mgr);
    }

我得到这个错误: 错误 CS0533:StickNFind.LeDeviceManager.UpdatedState(MonoTouch.CoreBluetooth.CBCentralManager)' hides inherited abstract memberMonoTouch.CoreBluetooth.CBCentralManagerDelegate.UpdatedState(MonoTouch.CoreBluetooth.CBCentralManager)' (CS0533) (SNF_Binding)

我该如何解决这个问题:

【问题讨论】:

  • 你完成这个绑定了吗?我需要同样的东西,如果你已经做过,我不想重新发明轮子。
  • 我确实设法克服了那个错误,但后来我收到了另一个关于 SNF SDK 中一些重复名称的错误,我放弃了。我在使用 SNF 时遇到了很多麻烦,我不推荐他们 - 他们的所有代码都非常糟糕,信标的行为无法预测,我永远无法让他们工作,他们的支持很糟糕。

标签: xamarin.ios xamarin


【解决方案1】:

你好,你可以试试这个吗?

[Protocol] // Added Protocol attribute
[Model]
[BaseType (typeof(NSObject))] //Changed BaseType to NSObject
public partial interface LeDeviceManager : ICBCentralManagerDelegate
{
    [Export ("devList", ArgumentSemantic.Retain)]
    NSMutableArray DevList { get; set; }

    [Export ("btmgr")]
    CBCentralManager Btmgr { get; set; }

    [Export ("delegate", ArgumentSemantic.Retain)]
    LeDeviceManagerDelegate Delegate { get; set; }

    [Export ("initWithSupportedDevices:delegate:")]
    IntPtr Constructor (NSObject[] devCls, LeDeviceManagerDelegate del);

    [Export ("startScan")]
    void StartScan ();

    [Export ("stopScan")]
    void StopScan ();

    [Export ("updatedState")] [New] // Notice I changed UpdatedState to updatedState lowercase u
    void UpdatedState(CBCentralManager mgr);
}

我强烈推荐阅读this doc 的绑定协议部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多