如何在iOS swift中检索缓存文件?

时间:2015-11-08 19:20:58

标签: ios swift caching nsdata nsfilemanager

感谢上一个问题的帮助。这次我想再次请求帮助,这个应用程序的内容需要在第一次打开时下载和缓存。

确实,它是一个Web应用程序,其中视图控制器由WebView组成。为了缓存整个网站(包括" index.htm"," first.htm," second.htm"等等),我已经整理了整个网站使用Kanna库,因此生成了许多链接(generatedURL)。然后我使用这里回答的方法将每个链接的HTML写入单个文件。 Read and write data from text file

这是我在AppDelegate.swift的didFinishLaunchingWithOptions中的代码。

            // get the documents folder url
        let documentDirectoryURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)

         for index in 0..<generatedURL.count {

            let fileDestinationUrl = documentDirectoryURL.URLByAppendingPathComponent(String(index)+".htm")

            cachedURL[index] = fileDestinationUrl   //store the cached urls


            let fileURL = NSURL(string: generatedURL[index])
        //if (NSFileManager.defaultManager().fileExistsAtPath(fileDestinationUrl)) {

                let data = NSData(contentsOfURL: fileURL!)

                if (data != nil) {
                    //writing to disk
                    data?.writeToURL(fileDestinationUrl, atomically: true)

                    // saving was successful. any code posterior code goes here

                    //reading from disk
                    do {
                        let mytext = try String(contentsOfURL: fileDestinationUrl, encoding: NSUTF8StringEncoding)
                        print(fileDestinationUrl)
                        print(mytext)   // "some text\n"

                    } catch let error as NSError {
                        print("error loading from url \(fileDestinationUrl)")
                        print(error.localizedDescription)
                    }
                }


//            } else {
//                print("The files already exist")
//                //reading from disk
//                do {
//                    let mytext = try String(contentsOfURL: fileDestinationUrl, encoding: NSUTF8StringEncoding)
//                    //print(fileDestinationUrl)
//                    //print(mytext)   // "some text\n"
//                } catch let error as NSError {
//                    print("error loading from url \(fileDestinationUrl)")
//                    print(error.localizedDescription)
//                }
//                
//            }

        }

运行程序时,所有链接的HTML都存储在本地文件中。加载HTML并因此在WebView中显示缓存页面没有问题。

文件:///var/mobile/Containers/Data/Application/.../Documents/0.htm 文件:///var/mobile/Containers/Data/Application/.../Documents/1.htm 文件:///var/mobile/Containers/Data/Application/.../Documents/2.htm 。 。

但是,目前的问题是我丢失了缓存页面之间的链接。例如,在网站上,&#34; index.htm&#34;上有一个按钮。链接到&#34; first.htm&#34;。

现在加载了缓存的&#34; index.htm&#34;现在是&#34; file:///var/....../0.htm" ;,我无法进入缓存&#34; first.htm&#34 ;因为&#34; file:///var/....../1.htm"不在按钮的HTML中。

那么如何在原始网址中检索缓存文件?我应该更改生成文件的方法还是仅使用所有缓存的文件路径创建新版本的网站?

感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:1)

好的,我想我现在可以回答我自己的问题了。使用包含webView对象的ViewController.swift中的以下函数,如果单击原始URL,我可以提示webView加载缓存的URL。

@v  = $g-> strongly_connected_component_by_index(0);
@v1 = $g-> strongly_connected_component_by_index(1);
@v2 = $g-> strongly_connected_component_by_index(2);