Así es como cargo mi wkwebview:

    let url = URL(fileURLWithPath: Bundle.main.path(forResource: "webviews/helloworld", ofType: "html")!)
    self.webview!.loadFileURL(url, allowingReadAccessTo: url)

Todo está bien en el simulador, pero cuando pruebo la aplicación en mi iPhone, las imágenes descargadas guardadas en el directorio de documentos no se cargan.

Así es como obtengo la URL del archivo de la imagen.

    let fileManager = FileManager.default
    let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let pathComponent = filename

    return directoryURL.appendingPathComponent(pathComponent).absoluteString

Esto devolvería algo como esto: file:///Users/Joshua/Library/Developer/CoreSimulator/Devices/9FE87399-6EBD-4DF3-BC6A-FD844DF62833/data/Containers/Data/Application/C1E250A4-823E-4590-8BDE-3891666CA728/Documents/57a8dd7255723c964658262d43c169c1

Tengo el mismo problema que este tipo: WKwebview: no se pueden ver las imágenes de los documentos de la aplicación en la vista web de la aplicación iOS swift

0
blake 13 dic. 2016 a las 12:55

2 respuestas

La mejor respuesta

Entonces, lo que hice para solucionar el problema fue transferir el directorio de vistas web al directorio / Libraries y almacenar las fotos que descargué en / Libraries / Caches

    let functionName:String = "moveFileToLibrary"
    let library = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0]
    let bundle = Bundle.main.path(forResource: "webviews", ofType: "")!

    let fileManager = FileManager.default

    if fileManager.isWritableFile(atPath: library.path)
    {
        if self.debug {print("\(functionName) @ \(self.className) => \(library.path) : File is writable")}
    }
    else
    {
        if self.debug {print("\(functionName) @ \(self.className) => \(library.path) : File is read-only")}
    }

    if fileManager.isWritableFile(atPath: bundle)
    {
        if self.debug {print("\(functionName) @ \(self.className) => \(bundle) : File is writable")}
    }
    else
    {
        if self.debug {print("\(functionName) @ \(self.className) => \(bundle) : File is read-only")}
    }

    if !fileManager.fileExists(atPath: library.appendingPathComponent("webviews").path)
    {
        do
        {
            try fileManager.copyItem(atPath: bundle, toPath: library.appendingPathComponent("webviews").path)
            if self.debug {print("\(functionName) @ \(self.className) => Webviews folder copied!")}
        }
        catch let error
        {
            if self.debug {print("\(functionName) @ \(self.className) => Error Writing Webviews folder: \(error.localizedDescription)")}
        }
    }
    else
    {
        if self.debug {print("\(functionName) @ \(self.className) => Webviews folder exists. Continue woth life.")}
    }
0
Joshua Kaleb Bondoc 19 dic. 2016 a las 03:17
func getDirectoryPath() -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}
func getImage(){
        let fileManager = NSFileManager.defaultManager()
        let imagePAth = (self.getDirectoryPath() as NSString).stringByAppendingPathComponent("yourImageName.jpg")// Your image name must be same as when you save image in directory 
        if fileManager.fileExistsAtPath(imagePAth){
            self.imageView.image = UIImage(contentsOfFile: imagePAth)
            // or do whatever you want with image. 
        }else{
            print("No Image")
        }
    }
0
Amar Bhanwaria 13 dic. 2016 a las 11:03