2016-06-13 21 views
0

我正在搞亂pdfs。我試圖將PDF加載到系統中,並寫出相同的PDF以獲得對整個過程的理解。將回調添加到預構建的異步函數Swift iOS

我得到它的問題是,我不得不從Web加載PDF,因爲WebViewUI.loadRequest是異步的,它不是及時完成。

override func viewDidLoad() { 
     super.viewDidLoad() 

     let filePath = getDocumentsDirectory().stringByAppendingPathComponent("output.pdf") 

     let url : NSURL! = NSURL(string: "http://www.nhs.uk/NHSEngland/Healthcosts/Documents/2014/HC5(T)%20June%202014.pdf") 

     loadTemplate(url, completion: {(webView: UIWebView) -> Void in 
      print("callback started") 
      let pdf = self.toPDF(webView) 

      do { 
       pdf!.writeToFile(filePath, atomically: true) 
      } catch { 
       // failed to write file – bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding 
      } 

      print("callback started") 

     }) 

     print("Finished viewDidLoad") 

    } 

    func loadTemplate(url: NSURL, completion: (webView: UIWebView) -> Void) { 
     print("Start loadTemplate") 
     // do some crunching to create the SketchAnimation instance... 
     let webView = UIWebView(frame: CGRectMake(20, 100, 300, 40)) 
     webView.loadRequest(NSURLRequest(URL: url)) 

     self.view.addSubview(webView) 

     // invoke the completion callback 
     completion(webView: webView) 

     print("finished loadTemplate") 
    } 

如何向loadRequest而不是loadTemplate添加回調?

回答

0

你完全沒有。您將視圖控制器設置爲Web視圖的委託並實施webViewDidFinishLoad方法。在這種方法中,你需要檢查以確保完成的負載是你之後的負載,如果是這樣,那麼當負載完成時,你會調用你想要運行的代碼。

下面是如何設置了一個基本的例子:

// 
// ViewController.swift 
// 

import UIKit 

class ViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet var webView: UIWebView! 

    var url = NSURL(string: "http://google.com") 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //load initial URL 
     let req = NSURLRequest(URL : url!) 
     webView.delegate = self 
     webView.loadRequest(req) 
    } 

    func webViewDidStartLoad(webView : UIWebView) { 
     print("AA") 
    } 

    func webViewDidFinishLoad(webView : UIWebView) { 
     print("BB") 
    } 

}