2014-01-23 2 views
3

Я пытаюсь сделать привязку для StickNFind для использования в проекте на основе Xamarin.Binding 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 шулера по:

[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

Мне удалось пройти мимо этой ошибки, но затем я получил еще одну ошибку о некоторых дублированных именах в SDF SDK, и я сдался. Я пережил массу проблем с ОЯТ, и я не рекомендую их - весь их код действительно дерьмовый, маяки ведут себя непредсказуемо, и я не мог заставить их работать, их поддержка ужасна. –

ответ

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); 
} 

Я настоятельно рекомендую прочитать Binding протоколы раздел this doc

Смежные вопросы