请求完成后获取数据

Get data after request is done

就我而言,主要问题是用户注册后我无法获取数据。

在我的 windows phone 应用程序中,我曾经通过触发事件 LoadCompleted 来获取数据。

这段代码展示了我之前是如何做到的:

private void AuthBrowser_LoadCompleted(object sender, NavigationEventArgs e)
    {
        string responceData = e.Uri.OriginalString;
        if (responceData.Contains("access_token"))
        {
            if (settings.Contains("IsRegistered"))
            {
                settings["IsRegistered"] = true;
            }
            else
            {
                settings.Add("IsRegistered", true);
            }
            var parameters = responceData.Split('#')[1].Split('&');
            var accessToken = parameters[0].Substring(parameters[0].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
            if (settings.Contains("AccessToken"))
            {
                settings["AccessToken"] = accessToken;
            }
            else
            {
                settings.Add("AccessToken", accessToken);
            }
            var expiresIn = parameters[1].Substring(parameters[1].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
            var uID = parameters[2].Substring(parameters[2].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
            if (settings.Contains("UserId"))
            {
                settings["UserId"] = uID;
            }
            else
            {
                settings.Add("UserId", uID);
            }
            if (settings.Contains("IsRegistered"))
            {
                settings["IsRegistered"] = true;
            }
            else
            {
                settings.Add("IsRegistered", true);
            }
            NavigationService.Navigate(new Uri("/Menu.xaml", UriKind.Relative));
        }
    }

但现在在我的 IOS 应用程序中,我不知道如何执行此操作。

我用过WKWebView。

这是我的代码示例:

import UIKit
import WebKit

class ViewController: UIViewController {

    @IBOutlet var containerView : UIView! = nil
    var webView: WKWebView?
    var uiWebView: UIWebView?
    override func loadView() {
        super.loadView()
        self.uiWebView = UIWebView()
        self.webView = WKWebView()
        self.view = self.webView!

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        var url = NSURL(string:"https://oauth.vk.com/authorize?client_id=4537563&" +
            "redirect_uri=http://api.vk.com/blank.html&display=wap&scope=9999999&response_type=token")
        var req = NSURLRequest(URL:url!)

        self.webView!.loadRequest(req)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

谢谢。

UIWebView 的委托协议为您提供了多种跟踪请求状态的方法:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebViewDelegate_Protocol/

尝试使用 WKNavigationDelegate

viewDidLoad

中设置委托
class ViewController: UIViewController, WKNavigationDelegate {

  override func viewDidLoad() {
    super.viewDidLoad()
    webView.navigationDelegate = self

    var url = NSURL(string:"https://oauth.vk.com/authorize?client_id=4537563&" +
        "redirect_uri=http://api.vk.com/blank.html&display=wap&scope=9999999&response_type=token")
    var req = NSURLRequest(URL:url!)

    self.webView!.loadRequest(req)
  }
}

加载完成后使用如下方式获取数据

func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {
    // your request has been completed, get the data here
}