Joe
Joe

Reputation: 2659

WKNavigationDelegate only works if set to self

I am writing a Swift Hybrid application and I need to be able to know when my WKWebView has finished loading a request. I am attempting to use WKNavigationDelegate to achieve this. However, the only way I can get the events to fire is if I set it this way:

webView.navigationDelegate = self

The problem is I have some data that I want associated with my request, so I created a custom class that implements WKNavigationDelegate that looks like this:

class MyNavigationDelegate : NSObject, WKNavigationDelegate {
    init(...) {
        //set local variables with passed args
    }

    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {        
        println("finished loading")
    }
}

then I assign it like this:

webView.navigationDelegate = MyNavigationDelegate(my, arguments, here)
webView.loadRequest(...)

The page is loading so there is no problem with how I'm loading it. What am I missing?

Upvotes: 7

Views: 3381

Answers (1)

michael
michael

Reputation: 2342

The delegate is a weak property, so make sure that you're holding on to the delegate class instance elsewhere -- it's likely getting deallocated before it even gets used. Meanwhile, self is not getting deallocated, so it is working.

Upvotes: 10

Related Questions