ユーザーがネットワークに接続したときにWebページを読み込み、オフラインで保存したい(画像/リソースを含む)。ユーザーがネットワークに接続していない場合は、以前に保存した Web ページを読み込む必要があります。私は試してみNSData dataWithContentsOfURL:(NSURL *)url
ましNSString stringWithContentsOfURL
たが、これらはリソースではなくhtmlコンテンツのみを保存します。前もって感謝します。
4 に答える
ASIHttpRequestでそれを行うことができます。そのプロジェクトを使用したくない (アクティブでなくなった) 場合は、コードとその機能を調べることができます。詳細については、「 iOS で画像を含む Web ページ全体をキャッシュする方法」も参照してください。
以下を使用して、このデータをファイルに書き込みます。
-(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];
}
そして次回ロードします。
簡単な解決策はこれだと思います-「Safariクライアント側ストレージおよびオフラインアプリケーションプログラミングガイド」、https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html
HTML5 と webview を使用してアプリを作成している場合にのみ、このメソッドをまだテストしていないため、機能する可能性があります。
のような 1 行のソリューションがあるかどうかはわかりませmyWebView.cache4Offline = YES;
んが、ウェブサイトのコードにアクセスできない限り (つまり、アプリ内でウェブサイトをオフラインで利用できるようにしたい場合)、次のようにする必要があります。これを自分でプログラムします。考えてみれば、それほど難しいことではないように思えます。
- 画像 URL の html 文字列をスキャンします (および必要なその他すべて)
- を使用してインターネットからこれらのリソースをダウンロードします
NSData dataWithContentsOfURL
(相対/絶対 URL のため、少し面倒かもしれません)。 - NSData writeToFile:options:error: でデータをファイルに保存します。
- HTML の URL を 3 の filePath に置き換えます (または、ファイル URL の URL を変換するための規則を使用することをお勧めします) 。
それが役に立てば幸い