2014-02-02 2 views
3

Привет, я пытаюсь создать следующее объявление в проекте привязки iOS. Декларация источника Objective C является следующаяРеализация протокола MKAnnation в проекте привязки

@interface LeBlutrackerDevice : LeDevice <MKAnnotation> 
{ 
    CLLocationCoordinate2D _coord; 
} 

@property (nonatomic,readonly,copy) NSString *title; 
@property (nonatomic,readonly,copy) NSString *subtitle; 
@property (nonatomic,readonly) CLLocationCoordinate2D coordinate; 

@property (nonatomic, strong) NSString *svInfo; 
@property (nonatomic, strong) NSString *navInfo; 

@property (nonatomic,readonly) enum LE_DEVICE_STATE state; 
@property (nonatomic,strong) id <LeBlutrackerDeviceDelegate> delegate; 
@property (readonly) BOOL bcKeyEnabled; 
- (BOOL) writeBroadcastKey: (NSData *) key; 

@end 

Это то, что я имею в ApiDefinition.cs

[Model, BaseType (typeof (LeDevice))] 
public partial interface LeBlutrackerDevice : MKAnnotation 
{ 
    [Export ("title", ArgumentSemantic.Copy)] 
    string Title { get; } 

    [Export ("subtitle", ArgumentSemantic.Copy)] 
    string Subtitle { get; } 

    [Export ("coordinate")] 
    CLLocationCoordinate2D Coordinate { get; } 

    [Export ("svInfo", ArgumentSemantic.Retain)] 
    string SvInfo { get; set; } 

    [Export ("navInfo", ArgumentSemantic.Retain)] 
    string NavInfo { get; set; } 

    [Export ("state")] 
    LE_DEVICE_STATE State { get; } 

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

    [Export ("bcKeyEnabled")] 
    bool BcKeyEnabled { get; } 

    [Export ("writeBroadcastKey:")] 
    bool WriteBroadcastKey (NSData key); 
} 

И я получаю следующие ошибки

Target GenerateBindings: 

ApiDefinition.cs(309,48): error CS0527: Type `MonoTouch.MapKit.MKAnnotation' in interface list is not an interface 

ApiDefinition.cs(313,10): warning CS0108: `SticknFind.LeBlutrackerDevice.Title' hides inherited member `MonoTouch.MapKit.MKAnnotation.Title'. Use the new keyword if hiding was intended 

ApiDefinition.cs(316,10): warning CS0108: `SticknFind.LeBlutrackerDevice.Subtitle' hides inherited member `MonoTouch.MapKit.MKAnnotation.Subtitle'. Use the new keyword if hiding was intended 

ApiDefinition.cs(319,26): warning CS0108: `SticknFind.LeBlutrackerDevice.Coordinate' hides inherited member `MonoTouch.MapKit.MKAnnotation.Coordinate'. Use the new keyword if hiding was intended 

Любой, кто пытается создать привязка для SticknFind SDK? сообщите мне, так как я более чем счастлив опубликовать окончательный результат на GitHub.

Если я пытаюсь его наследовать от IMKAnnotation я получаю следующую ошибку

btouch: No [Export] attribute on property SticknFind.LeBlutrackerDevice.Coordinate 
Task "BTouch" execution -- FAILED 

ответ

3

Вы хотите, чтобы наследовать от интерфейса а не типа, это то, что вызывает первую ошибку CS0527.

Это интерфейс, украшенный атрибутом [Protocol] (так что он будет соответствовать декларации ObjC). Он также будет решать более поздние ошибки CS0108, так как тип имеет дополнительные элементы, не входящие в протокол.

Так это должно решить:

[BaseType (typeof (LeDevice))] 
public partial interface LeBlutrackerDevice : IMKAnnotation { 
    ... 
} 
+0

, что не хватает, когда делать, что я получаю ошибку о том либо Скрытие свойство координат или, если я удалю его, что свойство координат не экспортируется. в любом случае это ошибка ishte, которую я получаю при использовании интерфейса, координаты не экспортируются в IMKAnnotation, см. отредактированный пост –

+2

@DiegoColombo: это не работает из-за ошибки в Xamarin.iOS (https://bugzilla.xamarin.com /show_bug.cgi?id=16948) - atm единственный способ обойти это - встроить API, который вы хотите из MKAnnotation в LeBlutrackerDevice самостоятельно. –

+0

О, так что пожелайте, чтобы это исправление было вывезено в ближайшее время, но в любом случае не уверены в недостающих свойствах IMKAnnotation. Он не имеет свойств Title и Subtitle объекта c Протокол MKAnnotation –