【问题标题】:Swift3 ios10 Xcode8 saving and loading pdfs to and from deviceSwift 3 ios 10 Xcode 8 在设备之间保存和加载 pdf
【发布时间】:2016-10-05 15:56:25
【问题描述】:

(这是我在这里的第一篇文章,对于我所犯的任何错误,我深表歉意) 我有在 iOS 模拟器上完美运行的代码,但是一旦我在真实设备上运行它,它就会在线显示白屏并出现此错误:com.apple.WebKit.WebContent:113:找不到指定的服务

这是我将 pdf 文件从 firebase 下载到设备的代码:

@IBAction func downloadButtonPressed (sender: UIButton) {


        print("zzz download button pressed")

        let directoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) //FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
        if directoryPath.count > 0 {
            let documentsDirectory = directoryPath[0]
            let pathURL = URL(fileURLWithPath: documentsDirectory)
            let fileURL = pathURL.appendingPathComponent("\(fixture.id).pdf")

            let httpsReference = FIRStorage.storage().reference(forURL: fixture.onlineManual)
            print("zzz urlManual: \(fixture.onlineManual)")


            let downloadTask = httpsReference.write(toFile: fileURL) {(URL, error) in
                if error != nil {
                    print("downloadError with pdf")
                    print(error?.localizedDescription)
                } else {
                    print("zzz donwload successful: \(URL!)")
                    let appDelegate = UIApplication.shared.delegate as! AppDelegate
                    let context = appDelegate.persistentContainer.viewContext
                    let newManual = NSEntityDescription.insertNewObject(forEntityName: "OfflineManuals", into: context)
                    newManual.setValue(self.fixture.id, forKey: "id")
                    newManual.setValue("\(URL!)", forKey: "manual")
                    do {

                        try context.save()
                        print("zzz manual saved to device")

                    } catch {

                        print("zzz error saving manual to core data")
                    }
                }
            }
        }
    }

这是从设备加载文件并将其显示在 WKWebView 中的代码

func loadRequest() {


        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        if documentsPath.count > 0 {

            let documentsDirectory = documentsPath[0]
            let restorePath = documentsDirectory + "/\(manualURL!).pdf"
            let url = URL(fileURLWithPath: restorePath)
            print("zzz url for local file: \(url)")
            let req = URLRequest(url: url)
            webView.load(req)
        }
    }

感谢您的阅读!

【问题讨论】:

    标签: swift swift3 ios10 xcode8 wkwebview


    【解决方案1】:

    我终于找到了一种方法来做到这一点。我仍然不知道为什么我在问题中的代码不能在真实设备上运行,但这个可以,因为我发现很多有类似问题的人拼命寻找答案,所以使用这个:

    SWIFT3 XCODE 8 IOS 10

    import UIKit
    import WebKit
    
    class ViewController: UIViewController {
    
    @IBOutlet weak var myView: UIView!
    var webView: WKWebView!
    let sema = DispatchSemaphore( value: 0 )
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        webView = WKWebView()
    
    
        myView.addSubview(webView)
        savePDFtoDevice()
        loadPDF()
    
    
    }
    

    不需要 LayoutSubviews,但没有它我会遇到问题...

    override func viewDidLayoutSubviews() {
        print("zzz width: \(self.myView.frame.size.width), height: \(myView.frame.size.height)")
        print("zzz width screen: \(self.view.frame.width)")
        let frame = CGRect(x: 30.0, y: 30.0, width: (self.myView.frame.width - 60), height: 300)
        webView.frame = frame
    }
    
    func savePDFtoDevice(){
        let myURL = URL(string: "http://www.claypaky.it/media/documents/HR_Mythos_Manual_05.2016_EN.pdf")
        let req = URLRequest(url: myURL!)
        let session = URLSession(configuration: .default)
        session.dataTask(with: req) { (data, response, error) in
            if error != nil {
                print("zzz error got no session")
            } else {
                if let pdfData = data {
                    var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
                    url = url.appendingPathComponent("file.pdf")
                    print("zzz url to save: \(url)")
                    print("zzz got data: \(pdfData.description)")
                    try? data?.write(to: url)
                    print("zzz wrote to file")
                    self.sema.signal()
    
                }
    
            }
        }.resume()
        sema.wait()
    }
    
    func loadPDF() {
        let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        print("zzz url to load from: \(url)")
    
        do {
            let content =  try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)[0]
            print("zzz file: \(content)")
            webView.loadFileURL(content, allowingReadAccessTo: content)
            print("zzz webView loaded")
        } catch {
            print("zzz error with getting the contents...")
        }
    }
    
    }
    

    我在我的应用程序中尝试了更改 URL 和文件名等,它成功了。 终于!!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2017-03-24
      • 1970-01-01
      • 2016-12-19
      相关资源
      最近更新 更多