ios - 在哪里/如何手动处理 WKWebView estimatedProgress 的观察者

标签 ios xamarin dispose key-value-observing wkwebview

我一直在尝试在 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()”会返回有关需要手动处置观察者的信息。但我一直无法弄清楚如何将其应用于我的问题。

谁能对此提供一些见解?

最佳答案

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

private IDisposable progressObserver;

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

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

ViewWillDisappear中处理:

this.progressObserver.Dispose();

关于ios - 在哪里/如何手动处理 WKWebView estimatedProgress 的观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752501/

相关文章:

c# - 关闭记录集后是否必须处理 SqlCommand?

java - 在嵌套静态类中使用静态方法处理后重建 JFrame

ios - Parse 中发送的推送为 0

c# - 如何将 View 的 BackgroundColor 属性绑定(bind)到 Xamarin Forms 中的 View 模型?

Xamarin 表单模板绑定(bind)

xamarin - 在 Xamarin.Forms RelativeLayout 中使用常量和因子?

ios - 前一天凌晨 4 点的日期

iphone - 如何在按下 UIBarButtonItem 之前启用/禁用方向(旋转)?

ios - 如何正确错误处理在 swift 中找不到的 XCUI 元素

c# - 处理对象时是否应该释放已加载的模块?