【问题标题】:MonoTouch binding issue of inheriting abstract memberMonoTouch 继承抽象成员的绑定问题
【发布时间】:2013-08-02 13:07:02
【问题描述】:

我正在处理一个 Objective-C 应用程序的 MonoTouch 绑定。我推荐了iOS Binding Walkthrough

我已经为 i386、ARM 生成了库,然后是一个通用库。此外,我创建了一个 MonoTouch 绑定项目。我使用 Sharpie 生成了 ApiDefinition 并添加了之前生成的通用库。现在,当我构建这个项目时,我收到以下错误。

ADClusterAnnotation.g.cs(86,86):错误 CS0533:
AnnotationClusterMap.ADClusterAnnotation.Coordinate' 隐藏继承的抽象成员 MonoTouch.MapKit.MKAnnotation.Coordinate' (CS0533)

这里是ADClusterAnnotation的代码sn-p:

文件 ADClusterannotation.h

@interface ADClusterAnnotation : NSObject <MKAnnotation> {
    CLLocationCoordinate2D  _coordinates;   
}
@property (nonatomic) CLLocationCoordinate2D coordinate;
@end

文件 ADClusterAnnotation.m

@synthesize coordinate = _coordinates;

这是来自 ApiDefinition 的代码 sn-p

[BaseType (typeof (MKAnnotation))]
public partial interface ADClusterAnnotation {
    [Export ("coordinate")]
    CLLocationCoordinate2D Coordinate { get; set; }
}

所以我认为我们需要在 ApiDefinition 中进行一些更改。我尝试从 API 定义中的 ADClusterAnnotation 中删除 Coordinate,但随后它给出了一个错误,它实现了一个抽象成员。关于 Monotouch 绑定,我缺少什么?

【问题讨论】:

    标签: xamarin.ios


    【解决方案1】:

    覆盖抽象成员需要c# newoverride

    您可以通过将 ApiDefinition 更改为:

    [BaseType (typeof (MKAnnotation))]
    public partial interface ADClusterAnnotation {
        [Export ("coordinate")]
        [New]
        CLLocationCoordinate2D Coordinate { get; set; }
    }
    

    【讨论】:

    • 你能解释一下为什么这里需要“new”或“override”吗?我看不出某些 ObjC 代码如何具有“抽象”方法。还是因为该属性已经在托管的 MKAnnotation 中?
    • MKAnnotation in Xamarin.iOSCoordinate 定义为 abstract: iosapi.xamarin.com/…。如果要覆盖抽象成员,则必须将其标记为newoverride。这就是[New] 属性的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多