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; 
相關問題