2011-07-13 6 views
0

私はハイブリッド(Objective C + HTML)アプリケーションを持っており、ユーザーのデバイスにリモートファイル(イメージとCSS)を定期的に保存できるようにしたいと思います。同じアプリケーション内のwebviewインスタンス内のブラウザによって読み込まれるようになります。webviewが見ることができるユーザーのデバイスにファイルを保存する

リソースバンドル自体にファイルを保存することはできません(シミュレータでは可能ですが)ので、ファイルを別の場所に保存する必要があると思います。しかし、私は、HTML文書がまだそれにアクセスできる場所をどのように使うべきかはわかりません。

NSURL* url = [NSURL URLWithString:@"http://myserver.com/August.png"]; 
    NSString* filePath = @"[?????]/MonthlyImage.png"; 
    NSData* data = [NSData dataWithContentsOfURL:url]; 
    if (data) 
    { 
     NSError* error; 
     if ([data writeToFile:filePath options:NSDataWritingAtomic error:&error]) 
     { 
      NSLog(@"Wrote"); 
     } 
     if (error != nil) 
     { 
      NSLog(@"ERROR: %@", [error description]); 
     } 
    } 

その後、私のWebViewの中で、私はこのようなイメージをロードできるようにしたいと思います:

<img src="[??????]/MonthlyImage.png" /> 

基本的に、私はこのような何かをしたいと思います値は??????の代わりに使用できますか?それも可能ですか?

答えて

1

アプリのバイナリを変更できないため、バンドルに保存することはできません。

ファイルをドキュメントフォルダに保存してから、そこから取得できます。重要な点は、UIWebVIewを作成するときにbaseURLと指定することです。

あなたはこの方法でドキュメントディレクトリを取得できます。

NSString *documentsDirectory = nil; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                NSUserDomainMask, YES); 
if ([paths count] > 0) { 
    documentsDirectory = [paths objectAtIndex:0]; 
} 

は、その後、あなたのファイルをそこに保存し、あなたのUIWebViewでそれをロードする際に、次のコマンドを実行します

[_label loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:documentsDirectory]]; 

今、 <img src="MonthlyImage.png" />は、あなたのドキュメントディレクトリ内のpngを探します。

+0

私は今それを試してみます。 baseURLは問題になりますが、アプリケーションのリソースフォルダからファイルを読み込んでいても、それはありませんか? – Andrew

+0

どういうわけか、私はそう思っています...しかし、それらのリソースをドキュメントフォルダにコピーしてもそれを克服することができます...(私の最後の編集も参照してください) – sergio

+0

これはうまくいくようです。興味深いことに、PCとは異なり、 'Documents'と' Library'フォルダはアプリケーションバンドル自体のサブフォルダであり、相対URLを使ってアクセスできます。だから私はベースURLを変更する必要はありません(とにかくURLRequestでUIWebViewをロードしています)。私はちょうど ''のようにファイルをロードする必要があります。 – Andrew

関連する問題