1

我想在用户连接到网络时加载网页并将其离线存储(包括图像/资源)。如果用户没有连接到任何网络,那么我应该加载以前存储的网页。我试过了NSData dataWithContentsOfURL:(NSURL *)urlNSString stringWithContentsOfURL但这些商店只存储 html 内容而不是资源。提前致谢。

4

4 回答 4

2

您可以使用ASIHttpRequest来做到这一点。如果您不想使用该项目(它不再处于活动状态),您可以查看代码及其作用。查看“如何在 iOS 中缓存带有图像的整个网页”以获取更多信息。

于 2012-05-08T14:01:56.620 回答
0

我不知道是否有类似的单线解决方案myWebView.cache4Offline = YES;,但我担心只要您无权访问网站的代码(即,如果您想让任何网站在您的应用程序中离线可用),您就必须自己编程。想一想,似乎并没有那么难:

  1. 扫描图像 url 的 html 字符串(以及您需要的所有其他内容)
  2. 使用从 Internet 下载这些资源NSData dataWithContentsOfURL(可能有点烦人,因为相对/绝对 URL)
  3. 使用 NSData writeToFile:options:error 将数据保存到文件中:
  4. 将 HTML 中的 URL 替换为 3 中的 filePath。(或者,更好地使用约定在文件 URL 中转换它们URL)

希望能帮助到你

于 2012-05-08T12:38:58.777 回答
0

使用以下命令将此数据写入文件:

-(void)writeDataToFile:(NSString*)filename
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    if(filename==nil)
    {
        DLog(@"FILE NAME IS NIL");
        return;
    }
    // the path to write file
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat: @"%@",filename]];
    /*NSData *writeData;
     writeData=[NSKeyedArchiver archivedDataWithRootObject:pArray]; */
    NSFileManager *fm=[NSFileManager defaultManager];
    if(!filePath)
    {
        //DLog(@"File %@ doesn't exist, so we create it", filePath);
        [fm createFileAtPath:filePath contents:self.mRespData attributes:nil];
    }
    else 
    {
        //DLog(@"file exists");
        [self.mRespData writeToFile:filePath atomically:YES];
    }

    NSMutableData *resData = [[NSMutableData alloc] init];
    self.mRespData=resData;
    [resData release];
}

并在下次加载。

于 2012-05-08T11:51:28.530 回答
0

我认为简单的解决方案是这样的——“Safari 客户端存储和离线应用程序编程指南”,https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html

仅当您正在使用 HTML5 和 webview 制作应用程序时,到目前为止尚未测试此方法,因此它可能会起作用。

于 2012-05-08T11:58:08.903 回答