【问题标题】:Where/how to manually dispose observer of WKWebView estimatedProgress在哪里/如何手动处理 WKWebView 估计进度的观察者
【发布时间】:2015-11-17 08:45:28
【问题描述】:

我一直在尝试使用 Xamarin ios UIViewController 中“estimatedProgress”属性上的 KVO 跟踪 WKWebView 上的估计加载进度。

我这样添加一个观察者:

public override void ViewDidLoad()
{
    base.ViewDidLoad();
    ...
    WkView.AddObserver("estimatedProgress", NSKeyValueObservingOptions.New, ProgressObserver);
    ...
}

ProgressObserver 看起来像这样:

public void ProgressObserver(NSObservedChange nsObservedChange)
{
    Console.WriteLine("Progress {0}", WkView.EstimatedProgress);
}

当我运行它时,它会返回如下内容:

2015-11-17 09:29:15.345 testappiOS[10056:1381155] Progress 0.1
2015-11-17 09:29:15.636 testappiOS[10056:1381155] Progress 0.285892975242258
2015-11-17 09:29:15.949 testappiOS[10056:1381169] Warning: observer object was not disposed manually with Dispose()

谷歌搜索“Warning: observer object was not disposed manually with Dispose()”显然会返回有关需要手动处置观察者的信息。但我无法弄清楚如何将其应用于我的问题。

谁能提供一些关于这方面的见解?

【问题讨论】:

    标签: ios xamarin dispose key-value-observing wkwebview


    【解决方案1】:

    首先你需要创建一个私有变量来保存一次性观察者:

    private IDisposable progressObserver;
    

    然后从 AddObserver 返回值中分配它,但将其放置到 ViewWillAppear 方法中:

    this.progressObserver = webView.AddObserver(
        "estimatedProgress", 
        NSKeyValueObservingOptions.New, 
        ProgressObserver);
    

    ViewWillDisappear中处理它:

    this.progressObserver.Dispose();
    

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 1970-01-01
      • 2020-05-22
      • 2011-09-22
      • 2015-04-25
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多