gpt4 book ai didi

Swift 3 ios 10 Xcode 8 在设备中保存和加载 pdf

转载 作者:搜寻专家 更新时间:2023-11-01 05:36:00 25 4
gpt4 key购买 nike

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

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

@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)
}
}

感谢阅读!

最佳答案

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

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 和文件名等,它成功了。终于!!!!!!

关于Swift 3 ios 10 Xcode 8 在设备中保存和加载 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com