После связывания с использованием Objective Sharpie Protocol Методы не запускаются в xamarin.iOS

У меня есть несколько проблем с привязкой с помощью Objective Sharpie. Я связываю IndoorAtlas iOS родной sdk с Xamarin.ios.

Проблема заключается в реализации методов протокола, так как они не вызываются. Нужно ли обращаться с этим особым образом?

Я прилагаю файл определения 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; }
}

//// ViewController - методы делегирования вызова

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

1 ответ

Решение

Не забудьте назначить viewcontroller для слабого делегата.

IALocationManager manager = new IALocationManager();
manager.WeakDelegate = this;
Другие вопросы по тегам