【问题标题】:Xamarin binding Events WeakDelegate issueXamarin 绑定事件 WeakDelegate 问题
【发布时间】:2017-06-23 13:30:25
【问题描述】:

我有关注

iOS 代码:

@protocol TestDelegate

- (void)onSuccess:(NSString*)token;

@end

@interface Utility : NSObject

@property (nullable, weak, getter = getTestDelegate, setter = setTestDelegate:) id<TestDelegate> delegate;

@end

Sharpie 使用委托到事件映射生成代码:

[Protocol, Model]
public interface TestDelegate
{
    [Export ("onSuccess:")]
    void OnSuccess (string token);
}

[BaseType(typeof(NSObject),
      Delegates = new string[] { "WeakDelegate" },
      Events = new Type[] { typeof(TestDelegate) })
public interface Utility
{
    [Wrap ("WeakDelegate")]
    [NullAllowed]
    TestDelegate Delegate { [Bind ("getTestDelegate")] get; [Bind ("setTestDelegate:")] set; }

    [NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
    NSObject WeakDelegate { [Bind ("getTestDelegate")] get; [Bind ("getTestDelegate:")] set; }
}

当我只附加到事件而不使用委托属性时,不会触发事件。

如果我错了,请纠正我,但是当仅使用事件时,没有任何内容引用内部创建的 _XDelegate,因此它将立即被垃圾收集。

在我的情况下,我必须在附加到事件后存储内部 _XDelegate 以使其工作。

public class TestClass
{
    private readonly Delegate _del;

    public TestClass()
    {
        iOS.SingletonInstance().OnSuccess += HandleOnSuccess;
        _del = iOS.SingletonInstance().Delegate; //store Delegate instance to make events work
    }
}

【问题讨论】:

    标签: events xamarin xamarin.ios weak-references xamarin.ios-binding


    【解决方案1】:

    问题出在其他地方 - SingletonInstance() 是一种方法而不是属性,因此没有任何内容引用返回的对象,因此它正在被 GC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2018-01-03
      • 2020-10-24
      • 1970-01-01
      • 2018-01-17
      • 2014-05-17
      相关资源
      最近更新 更多