0

我使用Objective sharpie绑定的问题很少。我使用Xamarin.ios绑定了IndoorAtlas iOS本机sdk。使用Objective Sharpie协议进行绑定之后在xamarin.iOS中没有调用方法

问题在于实现Protocols方法,因为那些方法没有被调用。我们需要以特殊的方式处理它吗?

我附加了API定义文件和实现文件。

// @protocol IALocationManagerDelegate 
[Protocol, Model] 
[BaseType(typeof(NSObject))] 
interface IALocationManagerDelegate 
{ 
    // @optional -(void)indoorLocationManager:(IALocationManager * 
    _Nonnull)manager didUpdateLocations:(NSArray * _Nonnull)locations; 
    [Export("indoorLocationManager:didUpdateLocations:")] 
    void DidUpdateLocations(IALocationManager manager, IALocation[] locations); 


    // @optional -(void)indoorLocationManager:(IALocationManager * 
    _Nonnull)manager didEnterRegion:(IARegion * _Nonnull)region; 
    [Export("indoorLocationManager:didEnterRegion:")] 
    void DidEnterRegion(IALocationManager manager, IARegion region); 
} 

// @interface IALocationManager : NSObject 
[BaseType(typeof(NSObject))] 
interface IALocationManager 
{ 
    [Wrap("WeakDelegate")] 
    [NullAllowed] 
    IALocationManagerDelegate Delegate { get; set; } 

    // @property (readwrite, nonatomic, weak) id<IALocationManagerDelegate> 
    _Nullable delegate; 
    [NullAllowed, Export("delegate", ArgumentSemantic.Weak)] 
    NSObject WeakDelegate { get; set; } 
} 

////视图控制器--Calling委托方法

[Export("indoorLocationManager:didUpdateLocations:")] 
public void DidUpdateLocations(IALocationManager manager , IALocation[] locations) 
{ 
    IALocation loc = locations[locations.Length - 1]; 
    if (mFloorPlan != null) 
    { 
     CoreGraphics.CGPoint cg = mFloorPlan.CoordinateToPoint(loc.Location.Coordinate); 
     this.map.Center = cg; 
    } 
} 

[Export("indoorLocationManager:didEnterRegion:")] 
public void DidEnterRegion(IALocationManager manager, IARegion region) 
{ 
    if (region.Type != ia_region_type.FloorPlan) 
     Console.WriteLine("Region Changed to {0} " + region.Identifier); 
    else 
    { 
     FetchFloorPlan(); 
    } 
} 
+0

1.是否已成功绑定项目? 2.你好像使用weakDelegate,你是否设置了它? –

+0

@ColeXia是具有约束力的项目建设良好,没有任何错误或问题。我使用弱代理,它在API定义中设置较弱。 – nikheel

+0

您是否将当前视图控制器分配给弱委托,'IALocationManager.WeakDelegate = this' –

回答

0

不要忘记到ViewController分配到薄弱委托。

IALocationManager manager = new IALocationManager(); 
manager.WeakDelegate = this; 
相关问题