グループは、アプリのリソースを整理しておくための 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]);
}