1

HTML を UIWebView 関数に直接ハードコードした後、「hello world」テキストを印刷しましたが、その HTML をファイル システムの別の場所に移動しようとしていますが、レンダリングされません。

ここに私が持っているものがあります:

- (void)viewDidAppear:(BOOL)animated
{   
    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"learn" ofType:@"html" inDirectory:@"src/html_files"];

    NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
    [theWebView loadHTMLString:htmlString baseURL:nil];
}

私のHTMLファイルは、私が作成したsrc/html_filesというディレクトリにあり、ファイルの名前はlearn.htmlです

HTML が画面に表示されないというのは、何が間違っているのでしょうか?

ありがとうございました!

4

1 に答える 1

1

グループは、アプリのリソースを整理しておくための Xcode の単なる構成要素です。Xcode は小さなフォルダー アイコンを使用しますが、必ずしもそれらが (Mac または iOS) ファイル システム上の個別のフォルダーであることを意味するわけではありません。

しかし、そのファイルをbundle resourceとして追加したようです。あなたが投稿したコードもそのように見えますが、確かに尋ねなければなりませんでした。

ほとんどの場合、唯一間違っているのは次の点です。

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"learn" 
                                                     ofType:@"html" 
                                                inDirectory:@"src/html_files"];

代わりにこれにする必要があります:

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"learn" 
                                                     ofType:@"html"];

NSBundle の Apple ドキュメントから、

+ (NSString *)pathForResource:(NSString *)name 
                       ofType:(NSString *)extension 
                  inDirectory:(NSString *)bundlePath

バンドルパス

最上位のバンドル ディレクトリのパス。これは有効なパスでなければなりません。たとえば、Mac アプリのバンドル ディレクトリを指定するには、パス /Applications/MyApp.app を指定します。

このbundlePathパラメーターは、バンドル リソースへの相対パスを指定するためのものではありません。pathForResource:ofType:ほとんどの場合、パラメータを持たないのバージョンがbundlePath使用されます。アプリがインストールされると、 learn.htmlファイルが存在する場所を見つけ、そこへのフル パスを返します。入れ子になっていることを気にする必要はありません。これは単なるバンドル リソースです。

試してみてください。ただし、コメントで提案したように、errorデバッグにはパラメーターを利用することを常にお勧めします。

NSError* error;
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error: &error];
if (error != nil) {
    NSLog(@"Error with stringWithContentsOfFile: %@", [error localizedDescription]);
}
于 2012-08-14T04:02:56.150 に答える