2014-01-23 25 views
3

我试图做一个结合了StickNFind在基于Xamarin项目使用。为Xamarin绑定StickNFind编译失败

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

下面是这个类的对象 - 标题:

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 

这是结合我拿出,用客观记号笔沉重的援助:

[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 member MonoTouch.CoreBluetooth.CBCentralManagerDelegate.UpdatedState(MonoTouch.CoreBluetooth.CBCentralManager)”(CS0533)(SNF_Binding)

如何解决这个问题:

+0

绑定协议部分没有完成这个绑定?我需要同样的东西,如果你已经做到了,不用重新发明轮子。 –

+0

我确实设法让它通过了那个错误,但是后来我又发现了一些关于SNF SDK中重复名称的错误,我放弃了。我经历了一大堆与SNF麻烦去了,我不建议他们 - 他们所有的代码是非常糟糕的,信标行为无法预测,我永远无法使他们的工作,他们的支持是非常糟糕。 –

回答

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